目录
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int ma = -99999;
for(int a1 = 0;a1<=n;a1++)
{
for(int a2 = 0;a2<=n;a2++)
{
for(int a3 = 0;a3<=n;a3++)
{
if((a1+a2)%2==0&&(a2+a3)%3==0&&(a1+a2+a3)%5==0)
{
ma = max(ma,a1+a2+a3);
}
}
}
}
cout<<ma;
return 0;
}
鸡兔同笼
描述
一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至
少有多少只动物,至多有多少只动物。
输入
一行,一个正整数a (a < 32768)。
输出
一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。
如果没有满足要求的答案,则输出两个0,中间用一个空格分开。
样例输入
20
样例输出
5 10
这道题有两种方法。第一种是枚举,比较复杂;第二种的直接计算更简便,但逻辑有些难理解。
第一种:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int mi = 99999;
int ma = -99999;
for(int i = 0;i<=n/2;i++)
{
int j = (n-i*2)/4;
if((i!=0||j!=0)&&i*2+j*4==n)
{
ma = max(ma,i+j);
mi = min(mi,i+j);
}
}
if(mi!=99999&&ma!=99999)
{
cout<<mi<<" "<<ma;
return 0;
}
cout<<"0 0";
return 0;
}
第二种:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
if(n%2==0)
{
if(n%4==0)
{
cout<<n/4<<" ";
}
else
{
cout<<n/4+1<<" ";
}
cout<<n/2;
}
else
{
cout<<"0 0";
}
return 0;
}
两倍
描述
给定
2
到
15
个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一
个数的两倍。比如给定
1 4 3 2 9 7 18 22
,得到的答案是
3
,因为
2
是
1
的两倍,
4
是
2
个两倍,
18
是
9
的两倍。
输入
一行,给出
2
到
15
个两两不同且小于
100
的正整数。最后用
0
表示输入结束。
输出
一个整数,即有多少个数对满足其中一个数是另一个数的两倍。
样例输入
1 4 3 2 9 7 18 22 0
样例输出
3
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[20] = {0};
int n = 0;
while(true)
{
int t;
cin>>t;
if(t==0)
{
break;
}
a[n] = t;
n++;
}
int cnt = 0;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
if(a[j]*2==a[i])
{
cnt++;
break;
}
}
}
cout<<cnt;
return 0;
}
完美立方
描述
形如a^3= b^3 + c^3 + d^3的等式被称为完美立 方等式。例如123= 6^3 + 8^3 + 10^3 。编写一 个程序,对任给的正整数N (N≤100),寻找所有 的四元组(a, b, c, d),使得a^3 = b^3 + c^3 + d^3,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。
输入
一个正整数N (N≤100)。
输出
每行输出一个完美立方。输出格式为:
Cube = a, Triple = (b,c,d)
其中a,b,c,d所在位置分别用实际求出四元组值代入。 请按照a的值,从小到大依次输出。当两个完美立 方等式中a的值相同,则b值小的优先输出、仍相 同则c值小的优先输出、再相同则d值小的先输出。
样例输入
24
样例输出
Cube = 6, Triple = (3,4,5)
Cube = 9, Triple = (1,6,8)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
for(int a = 2;a<=n;a++)
{
for(int b = 2;b<=n;b++)
{
for(int c = b;c<=n;c++)
{
for(int d = c;d<=n;d++)
{
if(a*a*a==b*b*b+c*c*c+d*d*d)
{
cout<<"Cube = "<<a<<",Triple = ("<<b<<","<<c<<","<<d<<")"<<endl;
}
}
}
}
}
return 0;
}
满足条件的整数
描述
假设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++)
{
for(int b = 2;b<=100;b++)
{
for(int c = 2;c<=100;c++)
{
if(a*a+b*b==c*c&&a<=b)
{
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 p,e,i,d;
cin>>p>>e>>i>>d;
int a = 1,b = 1,c = 1;
while(a*23+p<=21252+d)
{
b = 1;
while(b*28+p<=21252+d)
{
c = 1;
while(c*33+p<=21252+d)
{
if(a*23+p==b*28+e&&b*28+e==i+c*33)
{
cout<<a*23+p-d;
return 0;
}
c++;
}
b++;
c = 1;
}
a++;
b = 1;
c = 1;
}
return 0;
}
和数
给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
输入
共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个不大于10000的正整数组成的数列,相邻两个整数之间用单个空格隔开。
输出
一个整数,即数列中等于其他两个数之和的数的个数。
样例输入
4
1 2 3 4
样例输出
2
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[110];
int cnt = 0;
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
for(int i = 0;i<n;i++)
{
for(int j = i;j<n;j++)
{
for(int k = 0;k<n;k++)
{
if(a[i]+a[j]==a[k]&&i!=j&&j!=k&&i!=k)
{
cnt++;
}
}
}
}
cout<<cnt;
return 0;
}
因子问题
描述
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。
输入
包括两个整数N、M。N不超过1,000,000。
输出
输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1
样例输入
35 10
样例输出
5
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m,b;
cin>>n>>m;
for(int a = 1;a<m;a++)
{
b = m-a;
if(n%a==0&&n%b==0)
{
cout<<a;
return 0;
}
}
cout<<-1;
return 0;
}
最简真分数
描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的
组合。
输入
第一行是一个正整数n(n<=600)。
第二行是n个不同的整数,相邻两个整数之间用单个空格隔开。整数大于1且小于等于1000。
输出
一个整数,即最简真分数组合的个数。
样例输入
7
3 5 7 9 11 13 15
样例输出
17
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[610] = {0};
int cnt = 0;
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
bool f = true;
if(a[i]>=a[j])
{
f = false;
}
else
{
for(int k = 2;k<=min(a[i],a[j]);k++)
{
if(a[i]%k==0&&a[j]%k==0)
{
f = false;
break;
}
}
}
if(f==true)
{
cnt++;
}
}
}
cout<<cnt;
return 0;
}