Problem 1 三角形的个数
方法1:
#in clude
int isTriangle( int a, int b, int c ) // 任意 2 边之和大于第 3 边
{
if ( a+b>c && a+c>b && b+c>a )
return 1;
else
return 0;
}
void solve( int n )
{
int a, b, c;
int sum = 0;
for ( a=1; a
{
for ( b=a+1; b
{
for ( c=b+1; c
if ( a+b+c==n && isTriangle( a,b,c ))
{
sum++;
}
}
}
}
printf("%d\n", sum);
}
int mai n()
{
int n;
while ( scan f("%d", &n )==1 )
{
solve( n );
}
return 0;
}
方法2:
#in clude
int isTriangle( int a, int b, int c ) // 任意 2 边之和大于第 3 边
{
if ( a+b>c && a+c>b && b+c>a )
return 1;
else
return 0;
}
void solve( int n )
{
int a, b, c;
int sum = 0;
for ( a=1; a
{
for ( b=a+1; b
c=n-a-b;//保证 a+b+c=n
if ( c>b )//保证了 c与b、a不会相同
{
if ( isTriangle( a,b,c ))
sum++;
}
else
break;
}
}
printf("%d\n", sum);
}
int mai n()
{
int n;
while ( scan f("%d", &n )==1 )
{
solve( n );
}
return 0;
}
Problem 2纯粹素数
#i nclude
#in clude
#i nclude
#define MINM 1013//1013 是第一个大于 1000的纯粹素数
#defi ne MAXN 20//n 的最大取值
#defi ne MAXD 10
char digit[MAXD+1];
int pureprime[MAXN+1];
int isPrime(int i) //判断参数i是否是素数
{
{
{
{
int j, m= sqrt(i*1.0) ;
if(i<2) return 0;
for(j=2; j<=m; j++)
{
if(i%j==0)
return 0;
}
return 1;
}
int isPurePrime(int m)// 判断参数 m 是否是纯素数
{
int i, len;
sprintf(digit, "%d", m); //整数 m 转换成字符串保存在 digit 中 len=strlen(digit) ;
for(i=0;i
{
if((digit[i]!='0')&&(isPrime( atoi(digit+i) )==0))//atoi() 将数字字符串转换成整数 {
return 0;
}
}
return 1;
}
void initialize()
{
int i;
int n=0;
for(i=MINM; n
{ if(isPurePrime(i))
{ pureprime[++n]=i;
}
}
}
int main()
{
int n; initialize();
while(scanf("%d",&n)!=EOF)
printf("%d\n",pureprime[n]);
{
{
{
{
} return 0;
}
Problem 3纯粹合数
#in elude #in elude
#i nclude
#define MINM 100
#define MAXN 100〃最多需要计算 100个合数
#defi ne MAXD 10 char digit[MAXD+1];
int pureComposite[MAXN+1];
int count;
int isComposite(int m)〃判断参