当前位置: 代码迷 >> 综合 >> CCF 1034 钞票兑换
  详细解决方案

CCF 1034 钞票兑换

热度:59   发布时间:2024-02-08 05:18:49.0

将任意给定的整百元钞票,兑换成10元、20元、50元小钞票形式。输出兑换方案总数。

1。 一看,和鸡兔同笼一样:

#include <iostream>
using namespace std;
int main()
{
int n,i,j,k,s=0;
cin >> n;
for (i=0;i<=n/50;i++)
for (j=0;j<=n/20;j++)
for (k=0;k<=n/10;k++)
if (i*50 + j*20 + k*10 == n) s++;

cout << s << endl;
return 0;

}

递交后是时间超限。 

2。 优化

#include <iostream>
using namespace std;
int main()
{
int n,i,j,k,s=0;
cin >> n;
for (i=0;i<=n/50;i++)
for (j=0;j<=(n-i*50)/20;j++)
for (k=0;k<=(n-i*50-j*20)/10;k++)
if (i*50 + j*20 + k*10 == n) s++;

cout << s << endl;
return 0;

}
还是时间超限。

3。显示数据找规律:

#include <iostream>
using namespace std;
int main()
{
int n,i,j,k,s=0,x=0;
// cin >> n;
for (int n=100;n<=500;n+=100){

    for (i = 0; i <= n/50; i++)

{


for (j = 0; j <= n/20; j++)
for (k = 0; k <= n/10; k++)
if (i*50 + j*20 + k*10 == n) 
{s++;
}    
cout << i << " ";                        
cout << s << endl;        
x=x+s;              

s=0;                  

}
}    
cout << " " << x << endl;

return 0;

运行显示:

100  1 3 6 

200  1 3 6 8 11 

300  1 3 6 8 11 13 16 

400 1 3 6 8 11 13 16 18 21 

500 1 3 6 8 11 13 16 18 21 23 26 

4。 根据以上规律: 

#include <iostream>
using namespace std;
int main()
{
int n,s1,s2,s=1,k=0;
cin >> n;
for (int i= 1; i<=n/100; i++)
{
s1=s+2;
s=s1;
s2=s+3;
s=s2;
k=k+s1+s2;
}
cout << k+1 << endl;
return 0;

}