C++ example
- 格式:doc
- 大小:76.00 KB
- 文档页数:10
P1113:求方程 ax + by + cz = s 的正整数解
输入格式:一行四个数,表示 a b c s
输出格式:一个数,表示满足方程的 x y z 的正整数解的组数
输入样例:5 2 7 30
输出样例:4
#include
using namespace std;
int main(){
int x,s,y,z,a,b,c,ans=0;
cin>>a>>b>>c>>s;
for(x=1;x<=s/a;x++)
for(y=1;y<=(s-a*x)/b;y++){
z=(s-a*x-b*y)/c;
if(z>0&&a*x+b*y+c*z==s) ans++;
}
cout<
return 0;
}
P1114:面包店有三种面包,价格分别为 a b c 元,班长准备用班费 s 元去购买面包,他想在三种面包都买到同时又恰好花完 s 元的前提下使购得的面包只数最多。
输入檔:四个正整数 s a b c
输出檔:一个数,表示能购到三种面包又恰好用去 s 元时购得的最多面包数
输入样例:50 5 3 7
输出样例:14
#include
using namespace std;
int main(){
int x,s,y,z,a,b,c,ans=0;
cin>>s>>a>>b>>c;
for(x=1;x<=s/a;x++)
for(y=1;y<=(s-a*x)/b;y++){
z=(s-a*x-b*y)/c;
if(z>0&&a*x+b*y+c*z==s&&x+y+z>ans) ans=x+y+z;
}
cout<
return 0;
}
P1116:统计区间 [a,b] 中有多少个数,满足各位数字和是 x ,各位数字积是 y 。
输入格式:一行四个数 a b x y
输出格式:一个数
输入样例:35 2000 12 36
输出样例:7
#include
using namespace std;
int sum(int x){
int y=0;
while(x>0){ y+=x%10;
x/=10;
}
return y;
}
int mul(int x){
int y=1;
while(x>0){
y*=x%10;
x/=10;
}
return y;
}
int main(){
int a,b,x,y,ans=0,i;
cin>>a>>b>>x>>y;
for(i=a;i<=b;i++)
if(sum(i)==x&&mul(i)==y)ans++;
cout<
return 0;
}
P1118:第一项为 0 ,第二项为 1 ,以后每项是其前二项之和,
这样的数列称为“斐波那契数列”,
即:0 1 1 2 3 5 8 13 21 34 55 89 144 ……
输入格式:一个整数 n ( 3 ≤ n ≤ 100 )
输出格式:一行 n 个斐波那契数(数与数间空一格,最后一个后要换行)
输入样例:10
输出样例:0 1 1 2 3 5 8 13 21 34
#include
using namespace std;
int main(){
int n,i,a[101]={0,0,1};
a[0]=0;
a[1]=0;
a[2]=1;
cin >> n;
for(i=3; i<=n; i++)
a[i]=a[i-2]+a[i-1];
for(i=1;i<=n;i++)
cout << a[i] << (i
return 0;
}
P1137:一迭牌从上到下牌面值依次为 1 ~ n ,每次洗牌是从上往下数第 p 张牌开始的连续 c 张牌,抽出来放到顶上,就像图所示那样。
输入檔:第一行二个数 n k
( 3 ≤ n ≤ 50 ,1 ≤ k ≤ 50 ,k 表示洗牌次数 )
接下来 k 行,每行二个数 p c
表示从 p 开始向下连续的 c 张被抽出,放到顶上。
输出檔:一行 n 个数,表示洗完后从上到下各张牌的牌面值。
样例输入:10 3 ( 10 张牌,洗 3 次 )
5 3 ( 从第 5 张起的连续 3 张牌,抽出后放到上面 )
7 4 ( 从第 7 张起的连续 4 张牌,抽出后放到上面 )
3 6 ( 从第 3 张起的连续 6 张,抽出后放到上面 )
样例输出:9 10 5 6 7 1 4 8 2 3
#include
using namespace std;
int main(){
int n,k,p,c,a[51],b[51],j,i;
cin >> n >> k;
for(i=1; i<=n; i++) a[i]=i;
for(i=1; i<=k; i++) {
cin>>p>>c;
for(j=1; j<=c; j++) b[j]=a[p-1+j];
for(j=1; j
for(j=1; j
}
for(i=1;i<=n;i++)
cout << a[i] <<(i
return 0;
}
P1142:对于任意大于 6 的偶数,均可表示为二个质数之和的算式。
如: 34 可以表示为 34=5+29 。
输入檔:一个大于 6 的偶数
输出檔:若干行质数加式,加式中小质数在前,大质数在后
同类式如 34=5+29 和 34=29+5 ,仅输出 34=5+29 即可
输入样例:34
输出样例:34=3+31
34=5+29
34=11+23 34=17+17
#include
#include
using namespace std;
bool prime(int x)
{
for(int i=2; i<=sqrt(x); i++)
if(x%i==0) return 0;
return 1;
}
int main() {
int n,i;
cin >> n;
for(i=2; i<=n/2; i++)
if(prime(i) && prime(n-i))
printf("%d=%d+%d\n",n,i,n-i);
return 0;
}
P1138:学校水房有 m 个龙头供同学们打开水,每个龙头每秒钟供水量均为 1 。按排队顺序编为 1 到 n 号的同学依次接水,i 号同学的接水量为 w[i] 。接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某个水龙头完成后,下一名排队等候接水的同学马上接替开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。问所有同学都接完水需要多少秒。
输入:第一行二个数 n m ( n ≤ 10000 ,1 ≤ m ≤ 100 ,m ≤ n )
第二行 n 个数分别表示各位同学的接水量( Wi ≤ 100 )
输出:一个数,表示所有同学接完水的总时间
输入样例一:5 3
4 4 1 2 1
输出样例一:4
输入样例二:8 4
23 71 87 32 70 93 80 76
输出样例二:163
#include
#include
using namespace std;
int main() {
int n,m,i,j,k,x,a[101];
cin>>n>>m;
for(i=1;i<=m;i++)cin>>a[i];
for(i=m+1;i<=n;i++){
cin>>x;
k=1;
for(j=2;j<=m;j++)
if(a[j]
a[k]+=x;
}
k=1;
for(j=2;j<=m;j++) if(a[j]>a[k]) k=j;
cout<
return 0;
}
P1127:n 个人依次编号为 1、2、…… 、n 围坐成一个圈。从编号是 1 的人开始报数,数到第 m 个人出列,然后从出列的下一个人重新开始报数,数到第 m 个人又出列,……,如此反复直到所有的人全部出列为止。
输入格式:二个数 n m
输出格式:依次出圈的数,数之间有一空格。
输入样例:6 5
输出样例:5 4 6 2 3 1
#include
#include
using namespace std;
int main() {
int i,k,n,m,p=0,s=0,a[1001];
cin>>n>>m;
for(i=1;i<=n;i++)a[i]=1;
k=n;
while(k>0){
p=p%n+1;
s+=a[p];
if(s==m){
cout<1?" ":"\n");
a[p]=0;
k--;
s=0;
}
}
return 0;
}
P1128:输入 n 个数,输出它们按从小到大的排序结果。
输入格式:第一行,一个数 n ( 1 ≤ n ≤ 1000 )
第二行,n 个用空格隔开的整数
输出檔:一行 n 个从小到大排列的数,数之间用一空格隔开。
输入样例:10
3 6 9 10 2 5 8 1 4 7
输出样例:1 2 3 4 5 6 7 8 9 10
#include
#include
#include
#include
#include
using namespace std;
int main() {
int n,i,a[1001];
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];