
方法一:暴力解(遍历)
#include<iostream>
using namespace std;
int n;
int cnt;
//暴力解,遍历
int main()
{
cin>>n;
for(int i=0;i<=n/5;i++)//遍历5,范围是n中能取到5的个数
for(int j=0;j<=n/2;j++)//遍历5,范围是n中能取到5的个数
{
if((i*5+j*2)>n)//当取多了j就退出 j,进行下一个i的遍历
break;
for(int k=0;k<=n;k++)//遍历1
{
if((i*5+j*2+k)>n)//取多了1就退出,遍历下一个情况(2)
break;
if((i*5+j*2+k)==n)
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
方法二:方法二:只需考虑5元和2元,只要不超过n,剩下的全换1元即是1种方法
#include<iostream>
using namespace std;
int n;
int cnt;
//此方法只考虑5和2,剩下的数都可以换1
int main()
{
cin>>n;
for(int i=0;i<=n/5;i++)
for(int j=0;j<=n/2;j++)
{
if((i*5+j*2)>n)
break;
else
cnt++;
//此方法不用再判读if((i*5+j*2)==n)
}
cout<<cnt<<endl;
return 0;
}
方法三:方法三:先取出i张5元,剩下的钱只用2元和1元。则剩下的钱,只用1元为1种方法,能换1张2元则多一种方法,即剩下的钱/2+1种方法
#include<iostream>
using namespace std;
int n;
int cnt;
//方法三
//先取出i张5元,剩下的钱只用2元和1元。则剩下的钱
//只用1元为1种方法,能换1张2元则多一种方法,即剩下的钱/2+1种方法
int main()
{
cin>>n;
for(int i=0;i<=n/5;i++)
{
int tmp=n-i*5;
cnt+=tmp/2+1;
}
cout<<cnt<<endl;
return 0;
}