#include<stdio.h>
int gcd(int x,int y)
{
if(y==0)return x;
return gcd(y,x%y);
}
int main()
{
int i = 0;
int j = 0;
int count = 0;
for(i=1;i<2021;i++)
{
for(j=1;j<2021;j++)
{
if(gcd(i,j)==1)count++;
}
}
printf("%d\n",count);
return 0;
}
#include<stdio.h>
#include<stdbool.h>
bool check(int x)
{
int t = 0;
while(x)
{
t = x % 10;
if(t==2||t==4)return false;
x = x / 10;
}
return true;
}
int main()
{
int i = 0;
int j = 0;
int k = 0;
int count = 0;
for(i=1;i<=2019;i++)//i,j,k有可能相同
{
if(check(i))
{
for(j=1;j<=2019;j++)
if(check(j))
{
k = 2019-i-j;//不能取保k是正整数
if(check(k))count++;
}
}
}
printf("%d\n",count/6);
return 0;
}
问题分析:1.该代码没有确保 i
, j
, k
互不相同。即使 i
和 j
通过了检查,但如果 k
与 i
或 j
相同,仍会被计入计数。2.在计算 k
时,应该确保 k
是正整数,即 k > 0
。
#include<stdio.h>
#include<stdbool.h>
bool check(int x)
{
int t = 0;
while(x)
{
t = x % 10;
if(t==2||t==4)return false;
x = x / 10;
}
return true;
}
int main()
{
int i = 0;
int j = 0;
int k = 0;
int count = 0;
for(i=1;i<=2019;i++)
{
if(check(i))
{
for(j=i+1;j<=2019;j++)
{
if(check(j))
{
k = 2019-i-j;
if(k>j&&check(k))count++;
}
}
}
}
printf("%d\n",count);
return 0;
}