将任意给定的整百元钞票,兑换成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。 根据以上规律 +2 +3:
#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;
}