Tubro  C  programming  for  HNCRE  2005

1题:100个学生一起买小吃,共花钱100元,其中每个大学生花5元,每个中学生花3元,每3个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生为0的解)?
程序:
main( )
{ int a,b,c;
for(a=1;a<=20;a++)
for(b=1;b<=33;b++)
{ c=100—a—b;
if((20*a+33*b+c/3)= =100)
printf(%d,%d,%d\n,a,b,c);
}
getch( );
}
答案:6种:
32077
41878
81181
11683
12484
2题:50个小学生按150序号顺时针围成一圈,做出局游戏,老师站在圈外逆时针从最后一个人数起,每数到5时,这人从圈里出来,继续数12345,数到第5个学生时,他就出局,已出局的位置不再参加记数,直至所有的学生出局为止,问最后一个出局的学生序号是多少号?
程序:main()
{
  int i,k,sum,l,t=0;
  int a[50];
  clrscr();
  for(i=1;i<=50;i++)
  a[i]=1;
  for(k=1,sum=0,l=0;k<=50;k++)
  {
    for(i=50;i>0;i--)
    {
    sum+=a[i];
    if(sum==5) {sum=0;l++;a[i]=0;}
    if(l==49) {t=1;break;}
    }
    if(t==1)break;
  }
  for(i=1;i<=50;i++){
  if(a[i]==1) printf("%d",i);}
  getch();
}
答案:32
3题:50元兑换成5元,2元和1元的计算方法有多少种?
程序:
main( )
{ int x,f,t,n;
x=0;f=0;
while(f<=10)
  {t=0;while (t<=25)
{n=50—f*5—T*2
if(n>=o) x++;
t++:}
f++;}
printf(%d,x);
}
答案:146
4题:
ABC三个正整数,当满足1/A*A+1/B*B=1/C*C关系时,称为倒勾股数。求职130 A+B+C150的倒勾股数有多少组。
程序:
main()
{
  int a,b,c,k;
  int count=0;
clrscr();
for(a=1;a<150;a++)
for(b=1;b<150;b++)
  for(c=1;c<150;c++)
{
  k=a+b+c;
  if((float)1/(a*a)+(float)1/(b*b)==(float)1/(c*c))
if(k>130)
  if(k<150)
count++;
}
printf("%d",count);
getch();
}
答案:0
题目:
5题:
S1=1S2=1+3S3=1+3+5S4=1+3+5+7,……,SN=1+3+5+7+……+2N-1),N为正整数。编程求S1+S2+S3+S4+……+SN的值〈 20000时的N的最大值。
程序:
func(int n)
{
int i,sum;
sum=0;
for(i=1;i<=n;i++)
  sum=sum+2*i-1;
return(sum);
}
main()
{
int sum,a,b,c,i;
i=1;
sum=0;
clrscr();
while(sum<20000)
{
  sum=sum+func(i);
  if(sum>20000)
break;
i++;
}
printf("%d",i-1);
getch();
}
答案:38
题目:
6题:自然数对是指两个自然数的和与差都是平方数,如果817的和8+17=25与其差17-8=9都是平方数,则称817是自然数对(817)。假定(AB)与(BA)是同一个自然数对且假定A =B,求所有小于或等于100(即:A=100B=100〉的自然数对中B之和。
程序:
main()
{
int a,b,i,j;
int c=0;
clrscr();
  for(a=1;a<=100;a++)
  for(b=1;b<=100;b++)
{
if((i*i)= =(a+b)&&(j*j)= =(a-b)&&(a>=b))
    c=c+b;
}
printf("%d",c);
getch();
}编程小学生有必要学吗
答案:1440
7题: 18元钱分成1元、2元禾元的纸币且纸币数共为10张的分法有多少种(注:在兑换中1元、2元、5元的纸币数可以为0)?
解:main()
{int a,b,c,n;
n=0;
for(a=0;a<=18;a++)
for(b=0;b<=9;b++)
for(c=0;c<=3;c++)
if(a+b+c==10&&a+2*b+5*c==18)
n++;
printf(%d,n);
}
结果:3
8题:把一张1元钞票,换成1分、2分和5分硬币,每种至少11枚,问有多少种方法?
解:main()
{int x,y,z,n;
n=0;
for(x=11;x<=33;x++)
for(y=11;y<=22;y++)
for(z=11;z<=15;z++)
if(x+2*y+5*z==100)
n++;
printf(%d,n);
}
结果:13
9题:满足以下条件:X^2+Y^2+Z^2=25^2X+Y+Z之值最大的三个正整数XYZ,求X+Y+Z之值。
程序:
# include <math.h>
main( )
{ int x, y, z, ssum, max=0;
for( x=1; x<=24; x++)
for( y=1; y<=24; y++)
for( z=1; z<=24; z++)
if( x*x+y*y+z*z==25*25)
  { sum=x+y+z;
if(max<sum) max=sum;}
printf(max=%d\n,max);
}
答案:43
10题:编程求区间[5002500]中按递增顺序第25个素数。
程序:
main()
{
    int x,y,t,n;
    n=0;
    for(x=500;x<=2500;x++)
    {
      t=0;
      for(y=2;y<=x/2;y++)
        if(x%y= =0)t=1;
        if(t= =0)n++
}
if(n>=25)
break;
    printf(x=%d,x);
getch;
}
Key:659
11题:编程求取:[121140]之间的弦数的个数(若某正数的平方等于另两个正整数平方之各,则称该数为弦数。例如:3^2+4^2=5^2,因此5是弦数)。
程序:
main()
{
    int x,y,z,n;
    n=0;
    for(x=121;x<=140;x++)
    for(y=121;y<=140;y++)
    for(z=121;z<=140;z++)
    {
if(x*x= =y*y+z*z)
        n++;
    }
    printf(n=%d,n);
    getch();
}
Key:n=0
12题:编程求取:S=1/2+2/3+3/5+5/8+……的前30项的和(注:该级数从第二项开始,其分子是前一项的分母,其分母是前一项的分子与分母的和)。要求:按四舍五入的方式精确到小数点后第二位。
程序:
main()
{
    int a,b,c,n,s;
    for(n=1;n<=30;n++)
    {
        s=s+a/b;
        c=a;b=b+a;b=c;
}
    printf(s=%f,s);
    getch();
}
Key:18.46;
13题:
编程求取:从6开始的前6 个同构数的各(若某数与本身平方数的低位部分分别相等,则称之为同构数,如6,其平方数为36,则6为一个同构数)。
程序:
main()
{
long  n,m,k,s,sum;
sum=0;
m=0;
for(n=6;;n++)
  {
if(n<10)k=10;
  else if(n<100)k=100;
      else if (n<1000)k=1000;
        else k=10000;
s=n*n;
s=s – n;
if(s%k==0)
  {
    sum+=n;
    m++;
}
if(m<5) break;
}
printf(%ld,sum);
getch();
}
答案:10484
14题:
编程序求1~108所有整数的平方和并输出结果。
程序:
main()
{
long n,sum;
sum=0;
for(n=1;n<=108;n++)
  sum+=n*n;
printf(1^2+2^2+3^2++108^2=%ld,sum);
getch();
}
答案:435754
15题:
编程序求1~115的平方根的和并输出结果(保留小数点两位)。
程序:
#include math.h
main()
{
int n;
double sum;
sum=0.0;
for(n=1;n<=115;n++)
sum+=sqrt(n);
printf(This sum is :%.2f,sum);
getch();
}
答案:827.32
16.题:编程序求1~600能被11整除的个数。
程序:main( )
{
int a,n;
n=0;
for (a=1;a<=600;a++)
if (a%11==0) n++;
printf (n=%d\n,n);
getch( );
}
答案:n=54
17题:编程序求1+3+5+7+9+…这样的数的和。如果累加数大于1000是, 则程序终止并输出结果。
程序:main( )
{
int i=1,sum=0;
while (sum<=1000)
{
    sum=sum+(2*i-1);
    i++;
}
printf (sum=%d\n,sum);
getch( );
}
答案:sum=1024
18题:编程序求出100200之间同时满足除32和除53条件的数的个数。
程序:main( )
{
int a,n;
n=0;
for (a=100;a<=200;a++)
if (a%3==2&&a%5==3) n++;