第1题 百钱买百鸡 查看测评数据信息
百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100只鸡,公鸡、母鸡、小鸡各买多少只?本程序要求解的问题是:给定一个正整数 n,用 n 文钱买 n 只鸡,问公鸡、母鸡、小鸡各买多少只?
输入格式
输入一个正整数 n。(1≤n≤200)
输出格式
如果有解,依次输出公鸡、母鸡、小鸡的个数。
如果无解,输出"No Answer."。
输入/输出例子1
输入:
100
输出:
0 25 75
4 18 78
8 11 81
12 4 84
#include<bits/stdc++.h>
using namespace std;
int main(){ int n;cin>>n;for(int i=0;i<=n;i++){for(int j=n;j>=0;j--){if(7*i+4*j==n&&(n-i-j)%3==0){cout<<i<<" "<<j<<" "<<n-i-j<<" "<<endl;}}}return 0;
}
第2题 面积 查看测评数据信息
为了准备运动会颁奖典礼,学校想购买一块长方形的红地毯,已知学校给的的钱刚好够买面积为N的红地毯。由于地毯的边上要用长度为1的花边装饰,当然是边长越短越好(长度是整数)。为了节省花边,老师要求晨晨通过编计算机程序来计算边长最短是多少?
输入格式
一行:1个整数N,表示矩形的面积。N的范围为[1, 1000000000]。
输出格式
一行:一个整数表示边长。
输入/输出例子1
输入:
15
输出:
16
样例解释
(红地毯的边长分别为3和5)
#include<bits/stdc++.h>
using namespace std;
long long n,a,minn=1000000005;
int main(){cin>>n;for(int i=1;i<=sqrt(n);i++){if(n%i==0){a=((i+n/i)*2);if(a<minn) minn=a;}}cout<<minn;return 0;
}
第3题 双倍对 查看测评数据信息
如果两个数a,b,只要a=2*b或者b=2*a成立,那么就说这两个数是“双倍对”。例如:a=1,b=2,那么a和b这两个数是一对双倍对。现在给出一组数,请计算一下里面有多少对是“双倍对”。由于数据量比较大,请你用程序来实现自动计算吧。
输入格式
输入数据共有两行
第一行有一个整数N,表示这组数的个数。
第二行有N个正整数。
100%的数据 1≤N ≤1000 , 1≤ai≤1000000 。
输出格式
输出N个数中有多少对是“双倍对”。
输入/输出例子1
输入:
6
5 2 4 2 10 4
输出:
5
样例解释
其中:5和 10有1对, 2 和4有4对 ,共有5对双倍对。
#include<bits/stdc++.h>
using namespace std;
int n,a[10005],s=0;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i]==a[j]*2||a[j]==a[i]*2)s++;}}cout<<s/2;return 0;
}
第4题 牛奶桶 查看测评数据信息
农民约翰收到了一个需要M(1<=M<=1,000)单位的牛奶的订单,他需要马上满足。不幸地,他的牛奶机坏了,他只剩三个容量分别为X,Y,M的牛奶桶(1 <= X < Y < M)。它们一开始都是空的。他能用这三个桶进行任意次以下的两种操作:
-他能填满X桶,然后倒到M桶里,只要这次操作不会使M桶内的牛奶溢出
-他能填满Y桶,然后倒到M桶里,只要这次操作不会使M桶内的牛奶溢出
虽然约翰明白他不能完全把M桶填满,请帮他求出他能获得的M桶中牛奶的量的最大值。
输入格式
输入包含三个用空格分隔的整数X,Y,M
输出格式
输出M桶中牛奶量的最大值
输入/输出例子1
输入:
17 25 77
输出:
76
样例解释
约翰使用三次17大小的桶和一次25大小的桶,加起来得到最大值76
#include<bits/stdc++.h>
using namespace std;
long long a,b,k,s,maxx;
int main(){cin>>a>>b>>k;for(long long i=0;i<=k/a;i++){for(long long j=0;j<=k/b;j++){if(i*a+j*b<=k) {s=i*a+j*b;maxx=max(s,maxx);}else if(i*a+j*b>k)continue;}}cout<<maxx;return 0;
}
第5题 运动会 查看测评数据信息
佛山每年为全市中小学生兴办一次运动大会。为促进各校同学之间的交流,采用特别的分队方式:每一个学校的同学,必须被均匀分散到各队,使得每一队中该校的人数都相同。为增加比赛的竞争性,希望分成越多队越好。你的任务是根据各校的人数,决定最多可分成的队数。
输入格式
输入文件第一行为一个正整数N,代表学校的个数。接下来有N行,每行为一个正整数,分别代表这N个学校的人数。
输出格式
输出最多可分成的队数。
输入/输出例子1
输入:
3
12
16
20
输出:
4
样例解释
输入样例中有3个学校,人数分别为12、16、20,因为12=4×3,16=4×4,20=4×5,所以最多可以分成4个队,3个学校在每个队中的人数分别为3人、4人、5人。
数据说明:
学校数不超过500,每个学校人数最多为10000。
#include<bits/stdc++.h>
using namespace std;
int n,a,s,x;
int main(){cin>>n;cin>>a;s=a;for(int i=2;i<=n;i++){cin>>a;x=__gcd(s,a);s=a;} cout<<x;return 0;
}
第6题 子数整除 查看测评数据信息
对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:
sub1=a1a2a3
sub2=a2a3a4
sub3=a3a4a5
例如,五位数20207可以拆分成
sub1=202
sub2=020(=20)
sub3=207
现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1,sub2,sub3都可被K整除。
输入格式
输入仅一行,为正整数K(0<=1000)。
输出格式
输出的每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出No。
输入/输出例子1
输入:
15
输出:
22555
25555
28555
30000
#include<bits/stdc++.h>
using namespace std;
int n,s;
int main(){cin>>n;for(int i=1;i<3;i++){for(int j=0;j<10;j++){for(int k=0;k<10;k++){for(int q=0;q<10;q++){for(int w=0;w<10;w++){int x=i*100+j*10+k,y=j*100+k*10+q,z=k*100+q*10+w;if(x%n==0&&y%n==0&&z%n==0){s=1;cout<<i<<j<<k<<q<<w<<'\n';}}}}}}if(300%n==0){s=1;cout<<30000<<'\n';}if(s==0)cout<<"No"<<'\n';return 0;
}
第1题 牛式 查看测评数据信息
下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
数字只能取代*,当然第一位不能为0。
写一个程序找出所有的牛式
输入格式
Line 1: 数字的个数。
Line 2: N个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9}) 。
输出格式
共一行,一个数字。表示牛式的总数。
输入/输出例子1
输入:
5
2 3 4 6 8
输出:
1
样例解释
下面是样例的那个牛式。
2 2 2
x 2 2
------
4 4 4
4 4 4
---------
4 8 8 4
#include<bits/stdc++.h>
using namespace std;
int a[100005],s=0,n;
int f(int x){int num;if(x/100==0)num=2;else if(x/1000==0)num=3;else if(x/10000==0)num=4;for(int i=0;i<num;i++){int flag=0;for(int j=0;j<n;j++){if(x%10==a[j]) {flag=1;break;}}x/=10;if(flag==0){return 0;}}return 1;
}
int main(){cin>>n;for(int i=0;i<n;i++){cin>>a[i];}for(int a=111;a<999;a++){for(int b=11;b<99;b++) {if(!f(a)||!f(b)||a*b>9999||a*(b/10)>999||a*(b%10)>999){continue;}else{if(f(a*b)&&f(a*(b/10))&&f(a*(b%10))){s++; }}}}cout<<s;return 0;
}
第2题 火柴棒等式 查看测评数据信息
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
1. 加号与等号各自需要两根火柴棍
2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
3. n根火柴棍必须全部用上
输入格式
一个整数n(n<=24)
输出格式
表示能拼成的不同等式的数目。
输入/输出例子1
输入:
14
输出:
2
输入/输出例子2
输入:
18
输出:
9
样例解释
样例1:2个等式为0+1=1和1+0=1。
样例2:
9个等式为:
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
#include<bits/stdc++.h>
using namespace std;
int a[2001]={6},n,s=0,c[10]={6,2,5,5,4,5,6,3,7,6};
int main(){cin>>n;for(int i=1;i<2001;i++){int j=i;while(j>=1){a[i]+=c[j%10];j/=10;}}for(int i=0;i<1000;i++)for(int j=0;j<1000;j++)if(a[i]+a[j]+a[i+j]+4==n)s++;cout<<s;return 0;
}
这些题解仅供参考,有什么建议提在评论区,感谢知道(#^.^#)