Problem 1
题目概述:表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
思路分析:对数据进行预处理,自定义函数来判断是否素数。
细节处理:根据表达式的值的范围,来确定预处理的数的范围。
源代码:
#include<stdio.h>
#include<math.h>
int a[3010];
int judgeprime(int n)
{
a[1] = 1;
for(int i = 2;i<=3000;i++)
{
if(!a[i])
{
for(int j = 2;j<=sqrt(i);j++)
{
if(i%j==0)
{
a[i] = 1;
break;
}
}
if(a[i])
for(int k = 2;k*i<=3000;k++) a[k*i] = 1;
}
}
return a[n];
}
main()
{
int x,y,flag,b;
for(int k = 1;;k++)
{
flag = 0;
scanf("%d%d",&x,&y);
if(x||y)
{
for(int i = x;i<=y;i++)
{
b = i*i+i+41;
if(judgeprime(b))
{
printf("Sorry\n");
flag = 1;
break;
}
}
if(!flag) printf("OK\n");
}
if(!x&&!y) break;
}
}
Problem 2
题目概述:一个长度为n(n<=100)的从2开始的递增有序偶数数列。按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值,输出该平均值序列。
思路分析:对数列中完整的m个数与最后不足m个数分别处理。
细节处理:因为从2开始的递增偶数列,所以完整的m个数的平均值依次差2*m。
源代码:
#include<stdio.h>
int a[110];
main()
{
for(int i = 2;i<=100;i++) a[i] = 2*i;
int n,m,p,q,s,s0;
while(scanf("%d%d",&n,&m)!=EOF)
{
p = n/m,q = n%m;
s = 1+m;
s0 = 0;
printf("%d",s);
if(p>=2)
{
for(int i = 2;i<=p;i++)
{
s+=2*m;
printf(" %d",s);
}
}
if(q)
{
for(int i = p*m+1;i<=n;i++)
{
s0+=a[i];
}
printf(" %d",s0/q);
}
printf("\n");
}
}
Problem 3
题目概述:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。输出一个整数表示在第n年的时候,共有多少头母牛。
思路分析:母牛成年后的当年就会产小牛。
细节处理:设置变量表示有多少一年母牛,二年母牛,新生小牛成年母牛等
源代码:
#include<stdio.h>
main()
{
int n,a4,a3,a2,a1,s,a;
for(int k = 1;;k++)
{
scanf("%d",&n);
if(n)
{
a4 = 1;a3 = 0;a2 = 0;a1 = 0;
for(int i = 2;i<=n;i++)
{
a4+=a3; //成年母牛
a3 = a2;
a2 = a1;
a1 = a4; //一头成年母牛产一头小牛
}
s = a1+a2+a3+a4;
printf("%d\n",s);
}
else break;
}
}
Problem 4
题目概述:输入n(n<=100)个整数,按照绝对值从大到小排序后输出。
思路分析:应用选择排序法。
细节处理:将输入的数存到一个数组a中,设置另一个数组b存对应的绝对值,对数组b中元素进行选择排序的同时,对数组a中对应的元素进行相对应的操作。
源代码:
#include<stdio.h>
#includ