今天去了三教,感觉回到了高三。考研,恐怖如斯!!!
当年 tourist,他能在 World Final 上,4 小时 AK,我今天 再做俩题,不是问题。
这个题,我之前一直有一点想错了:因为题目里说,i ! = j 的情况可以算两次,所以我以为 i = = j的情况就只能算一次。所以,在判断等式成立条件的时候,我就把 i==j 这种情况专门设置了一个计数器ans2,最后算总和之前,先把ans2除个2。
但后来,看了样例之后,我知道,上面那个思路有问题。
比如,当火柴棍=18的时候,样例:2+2=4。
我就是把这种情况除以了2。
但是呢,因为我们是用的双重循环,所以这种情况在循环里只会出现一次。
所以,ans2不用除以2。
附上两个代码(虽然,思路是一样的。。。)
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[]={6,2,5,5,4,5,6,3,7,6};
int getsticks(int num)
{
int cnt=0;
if(num==0) cnt+=a[num];
else
{
while(num>0)
{
cnt+=a[num%10];
num/=10;
}
}
return cnt;
}
int main()
{
int n,c,n_a,n_b,n_c,ans1=0,ans2=0;
cin>>n;
for(int i=0;i<=1111;i++)
for(int j=0;j<=1111;j++)
{
c=i+j;
if(getsticks(i)+getsticks(j)+getsticks(c)==n-4) ans1++;
}
cout<<ans1<<endl;
return 0;
}
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[]={6,2,5,5,4,5,6,3,7,6};
int getsticks(int num)
{
int cnt=0;
if(num==0) cnt+=a[num];
else
{
while(num>0)
{
cnt+=a[num%10];
num/=10;
}
}
return cnt;
}
int main()
{
int n,c,n_a,n_b,n_c,ans1=0,ans2=0;
cin>>n;
for(int i=0;i<=1111;i++)
for(int j=0;j<=1111;j++)
{
c=i+j;
if(getsticks(i)+getsticks(j)+getsticks(c)==n-4&&i!=j) ans1++;
else if(getsticks(i)+getsticks(j)+getsticks(c)==n-4&&i==j) ans2++;
}
// ans2/=2;这里不用除以2
ans1+=ans2;
cout<<ans1<<endl;
return 0;
}