本文选择了三道经典题型及它们的代码示例,希望能对大家有帮助。
换零钱
题目描述
某人想将手中的n张面值 100 元的人民币换成 5 元、 1 元和 0.5 元面值的票子,但要求换正好 100 张,且每种票子至少一张。问:有几种换法?
输入
一个数字n表示要换的100元张数(1<=n<=4)
输出
一个数字表示有几种换法
样例输入
1
样例输出
11
#include<iostream>
using namespace std;
int main(){
int n,m,ans=0;
cin>>n;
m=100*n;//总钱数
for(int i=1;i<=m/5;i++){//穷举¥5张数
for(int j=1;j<=m/1;j++){//穷举¥1张数
int k=100-i-j;//¥0.5张数
if(i*5+j+k*0.5==m&&k>=1) ans++;
}
}
cout<<ans;
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<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[16],x,n,ans=0;
while(1){
cin>>x;
if(x==0) break;
a[n++]=x;
}
sort(a,a+n);
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(a[j]==a[i]*2) ans++;
}
}
cout<<ans;
return 0;
}
火柴棒等式
题目描述
给出 n 根火柴棒(不超过24根),可以拼出多少个形如“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≤24)。
输入
输入一个数字,表示火柴棒的根数
输出
可以拼出“A+B=C”的等式个数
样例输入
14
样例输出
2
#include<iostream>
using namespace std;
int a[2500]={6,2,5,5,4,5,6,3,7,6};
int n,c,sum;
int pro(int x){
int s=0;
if(x==0){
return 6;
}
while(x){
s+=a[x%10];
x/=10;
}
return s;
}
int main(){
for(int i=10;i<=2222;i++) a[i]=pro(i);
cin>>n;
n-=4;
if(n>=9){
for(int i=0;i<1111;i++){
for(int j=0;j<1111;j++){
c=(i+j);
if((a[i]+a[j]+a[c])==n)
sum++;
}
}
}
cout<<sum;
return 0;
}
//注:图片来源于网络