当前位置: 首页 > article >正文

C++枚举算法(2)

满足条件的整数

题目描述: 假设a、b、c均为整数,且满足a,b,c 大于1,并且小于等于100,找出所有符合条件:“a^2+ b^2= c^2”的整数组。

输入

输出

按a从小到大的顺序输出所有满足条件的整数组(若a相同,则按b从小到大的顺序输出),每行 一组,每一组数据的输出样式为: a*a + b*b = c*c

注意:

(1)为避免重复输出,要求a<=b

(2)加号和等号左右各有一个空格,除此之外无多余空格。

做法一:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	for(int a=2;a<=100;a++)/*因为题目里说了a,b,c都大于1*/
	{
		for(int b=a;b<=100;b++)
		{
			//c是可以算出来的,所以不需要for循环,可以节省内存 
			if(a*a+b*b==sqrt(a*a+b*b)*sqrt(a*a+b*b)&&(int)sqrt(a*a+b*b)==sqrt(a*a+b*b)&&sqrt(a*a+b*b)<=100/*要保证c是整数并且c<=100*/)
			{
				cout<<a<<"*"<<a<<" + "<<b<<"*"<<b<<" = "<<sqrt(a*a+b*b)<<"*"<<sqrt(a*a+b*b)<<endl;
			}
		}
	}
	
	
	return 0;
}

做法二:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	for(int a=2;a<=100;a++)/*因为题目里说了a,b,c都大于1*/
	{
		for(int b=a;b<=100;b++)
		{
			for(int c=2;c<=100;c++)
			{
				if(a*a+b*b==c*c)
				{
					cout<<a<<"*"<<a<<" + "<<b<<"*"<<b<<" = "<<c<<"*"<<c<<endl;
				}
			}
		}
	}
	
	
	return 0;
}

生理周期

题目描述: 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23 天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面 表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三 个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我 们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第 一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是 给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间) 下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10, 下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。

输入:一行,包含四个整数:p, e, i和d,相邻两个整数之间用单个空格隔开。 p, e, i分别 表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是 给定的时间,可能小于p, e, 或 i。 所有给定时间是非负的并且小于等于365, 所求 的时间小于等于21252。

输出 :一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天 数)。

样例输入

4 5 6 7

样例输出

16994

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	for(int i=d;i<=21252;i++)
	{
		if(i%23==a%23&&i%28==b%28&&i%33==c%33)
		{
			cout<<i-d;
			return 0;
		}
	}
	
	
	return 0;
}

子串计算

题目描述: 给出一个只包含0和1的字符串(长度在1到100之间),求其每一个子串出现的次数。 输入 一行,一个01字符串。 输出 对所有出现次数在1次以上的子串,输出该子串及出现次数,中间用单个空格隔开。按子串的字典 序从小到大依次输出,每行一个。

样例输入

10101

样例输出

0 2

01 2

1 3

10 2

101 2

#include<bits/stdc++.h>
using namespace std;
string w(int,int,string);
string b[110];
int lb=0;
int main()
{
	string a;
	cin>>a;
	int n=a.size();//获取string的长度
	int cnt[110]={0};
	for(int i=0;i<n;i++)
	{
		for(int j=i;j<n;j++)
		{
			bool f=true;
			for(int k=0;k<lb;k++)
			{
				if(w(i,j,a)==b[k])
				{
					cnt[k]++;
					f=false;
					break;
				}
			}
			if(f==true)
			{
				b[lb]=w(i,j,a);
				cnt[lb]=1;
				lb++;
			}
		}
	}
	for(int i=0;i<lb-1;i++)
	{
		for(int j=0;j<lb-1-i;j++)
		{
			if(b[j]>b[j+1])
			{
				swap(b[j],b[j+1]);
				swap(cnt[j],cnt[j+1]);
			}
		}
	}
	for(int i=0;i<lb;i++)
	{
		if(cnt[i]>=2)
		{
			cout<<b[i]<<" "<<cnt[i]<<endl;
		}
	}
	
	
	return 0;
}
string w(int s,int e,string n)
{
	string z="";
	for(int i=s;i<=e;i++)
	{
		z=z+n[i];
	}
	return z;
}

找和为K的两个元素

题目描述: 在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。 输入 第一行输入序列的长度n和k,用空格分开。 第二行输入序列中的n个整数,用空格分开。 输出 如果存在某两个元素的和为k,则输出yes,否则输出no。

样例输入

9 10

1 2 3 4 5 6 7 8 9

样例输出

yes

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int k;
	cin>>k;
	int a[110];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(a[i]+a[j]==k)
			{
				cout<<"yes";
				return 0;
			}
		}
	}
	cout<<"no";
	
	
	return 0;
}

猴子吃桃

题目描述: 海滩上有一堆桃子,N只猴子来分。第一只猴子把这堆桃子平均分为N份,多了一个,这只猴子把多 的一个扔入海中,拿走了一份。第二只猴子接着把剩下的桃子平均分成N份,又多了一个,它同样把多 的一个扔入海中,拿走了一份。第三、第四、……,第N只猴子仍是最终剩下的桃子分成N份,扔掉多了 的一个,并拿走一份。 编写程序,输入猴子的数量N,输出海滩上最少的桃子数,使得每只猴子都可吃到桃子。 输入 一个整数N。 输出 输出当猴子数量为N时海滩上最少的桃子数。结果保证在int型范围内。

样例输入

2

样例输出

7

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int sum=1;
	for(int i=0;i<n;i++)
	{
		sum=sum*n+1;
//因为每一只猴子都要扔掉一个桃子,所以+1,而拿走的那一份又是n份的其中之一,要还原就得*n
	}
	cout<<sum;
	
	
	return 0;
}

余数相同问题

题目描述: 已知三个正整数 a,b,c。 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少? 数据保证x有解。 输入 一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。 输出 一个整数,即满足条件的x的最小值。

样例输入

300 262 205

样例输出

19

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c;
	cin>>a>>b>>c;
	for(int x=2;true;x++)
	{
		int e,y,z;
		e=a%x;
		y=b%x;
		z=c%x;
		if(e==y&&e==z&&y==z)
		{
			cout<<x;
			return 0;
		}
	}
	
	
	return 0;
}


http://www.kler.cn/a/226861.html

相关文章:

  • 幻兽帕鲁专用服务器延迟高怎么解决?
  • ADB的配置和使用及刷机root
  • ffmpeg 输入文件,输入出udp-ts 指定pid
  • MySQL中的视图与索引
  • C#用正则表达式验证格式:电话号码、密码、邮编、手机号码、身份证、指定的小数点后位数、有效月、有效日
  • shell中脚本参数传递的两种方式
  • 海康威视有插件、无插件播放;webrtc直播;西瓜视频播放器;mpegts.js直播;flvjs直播
  • HSRP配置指南
  • HiveSQL题——collect_set()/collect_list()聚合函数
  • [UI5 常用控件] 05.FlexBox, VBox,HBox,HorizontalLayout,VerticalLayout
  • 使用Arcgis对欧洲雷达高分辨率降水数据重投影
  • Vue中的常用指令
  • 【讲座分享】| 复旦大学张奇教授——《自然语言发表论文如何打怪升级?NLP顶会论文发表》
  • webrtc mediasoup sctp 起什么作用? 用来传输什么数据
  • C语言——R/预处理详解
  • 【从零开始的rust web开发之路 四】rust语言tokio异步使用redis教程
  • 循环神经网络RNN专题(01/6)
  • Apache Paimon 文件布局设计
  • vue3 markdown编辑器推荐(maven-editor vditor tiptap )
  • excel中提取一串数字中的某几个数字