实验 21 问题回顾四 参考答案

题目描述

有一个圆,圆心坐标是(0,0),半径r=4.5,任意输入一个点的坐标(x,y),判断这个点是在圆内,圆周上,还是在圆外。

输入要求

两个浮点数x,y

输出要求

如果在圆内,输出in

如果在圆外,输出out

如果在圆上,输出on

假如输入

1.0 1.0

应当输出

in

#include<stdio.h>

#include<stdlib.h>

int cmp(const void*a,const void*b)

{

   return *(int*)a-*(int*)b;

}

int main(){

   int n,t,i,m=0,it[501];

   while(scanf("%d %d",&n,&t)!=EOF){

      m=0;

      for(i=0;i<n;i++)

         scanf("%d",it+i);

      qsort(it,n,sizeof(int),cmp);

      for(i=0;i<n;i++)

         if(it[i]>t)t+=2;

         else m++;

         t+=m;

         printf("%d ",t);}

   return 0;

}

题目描述

用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于10的-n次方为止(绝对值小于10的-n次方的这项不计算在内)。

输入要求

输入若干组精度要求n(3<=n<=8),n=0时退出,n超出范围输出“Error!”。

输出要求

输出各组不同精度要求的值。

假如输入

7

0

应当输出

3.141592

#include <stdio.h>

#include <math.h>

 

int main( )

{

   int k,s=1;

   double n,t,pi;

   scanf("%d",&k);

   while (k!=0)

   { 

      if (k>=3 && k<=8)

      {

         n=1,t=1,pi=0;

         while((fabs(t))>pow(10,-k))

         {

            pi=pi+t;

            n=n+2;

            s=-s;

            t=s/n;

         }

         pi=pi*4;

         printf("%lf ",pi);

      }

      else

         printf("Error! ");

      scanf("%d",&k);

   }

   return 0;

}

题目描述

 著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。

某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔?

输入要求

多个正整数n(1<=n<=80),表示需要求第n个月新增的兔子对数。

输出要求

 对于输入的n,求第n个月新增的兔子对数。当n=0时输入结束,该数据不作处理。

假如输入

16

0

应当输出

987

#include <stdio.h>

 

int main(){

#ifndef ONLINE_JUDGE

   freopen("in", "r", stdin);

#endif

 

   // r[i][0] is the number of rabbits which born on current month

   // r[i][1] is the number of rabbits which are 2 months old

   // r[i][2] is the number of rabbits which are  months old (old rabbits can fertility bunny)

   long long r[81][3] = {{0,0,1}};

   for(int i=1; i<=80; i++){

      r[i][1] = r[i-1][0];

      r[i][2] = r[i-1][1] + r[i-1][2];

      r[i][0] = r[i][2];

   }

   int n;

   while(scanf("%d", &n), n){

      printf("%lld ", r[n][0]);

   }

 

   return 0;

}

题目描述

  输入三个自然数N,i,j(l≤i≤N,1≤j≤N),输出在一个N×N格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。例如,n=4,i=2,j=3表示棋盘中的第二行第三列的格子,如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:

当n=4,i=2,j=3时,输出的结果是:
(2,1) (2,2) (2,3) (2,4) {同一行上格子的位置}
(1,3) (2,3) (3,3) (4,3) {同列列上格子的位置}
(1,2) (2,3) (3,4) {左上到右下对角线上的格子的位置}
(4,1) (3,2) (2,3) (1,4) {左下到右上对角线上的格子的位置}

输入要求

只有1行,共3个数,分别为N(1≤N≤10000),i,j的值。

输出要求

按照题目描述的格式输出。

假如输入

4 2 3

应当输出

(2,1)(2,2)(2,3)(2,4)

(1,3)(2,3)(3,3)(4,3)

(1,2)(2,3)(3,4)

(4,1)(3,2)(2,3)(1,4)

#include<stdio.h>

#include<string.h>

int main(){

   int N,a,b,c,d;

   while(scanf("%d%d%d",&N,&a,&b)!=EOF){

      c=b-a;

      d=b+a;

      int i,j;

      for(i=1;i<=N;i++) printf("(%d,%d)",a,i);

      puts("");

      for(i=1;i<=N;i++) printf("(%d,%d)",i,b);

      puts("");

      for(i=1;i<=N;i++) if(i+c>=1&&i+c<=N) printf("(%d,%d)",i,i+c);

      puts("");

      for(i=N;i>=1;i--) if(d-i>=1&&d-i<=N) printf("(%d,%d)",i,d-i);

      puts("");}

   return 0;

}

题目描述

输入整数R,输出小于等于R的满足X2+Y2=Z2的所有正整数X,Y,Z。

输入要求

只有一个数:R(5≤R≤I000000)。

输出要求

只有一个数:表示共有多少组满足条件的勾股数。

假如输入

10

应当输出

2

#include<stdio.h>

#include<math.h>

int main()

{

   int r,i=0,x,y,z;

   scanf("%d",&r);

   for(x=1;x<=r;x++){

      for(y=1;y<=r;y++){

         for(z=1;z<=r;z++){

            if(x*x+y*y==z*z)

                i=i+1;

         }

      }

   }

   i=i*0.5;

   printf("%d",i);

   return 0;

}

题目描述

桐桐在研究素数时,发现有些素数很特别,例如131,它是素数,同时,它又是回文数:从左边读和从右边读都是同一个数。桐桐想把不大于n的所有既是回文数又是素数的数求出来,你能帮助她吗?

输入要求

输入数据有多组,每组只有一个整数n(2≤n≤10^6)。

输出要求

输出满足题设条件的数,每行输出5个数。

假如输入

100

应当输出

2 3 5 7 11

#include<stdio.h>

#include<math.h>

int prime(int m);

int isCircle(int m);

int reverse(int i);

 

int main( )

{

   int m,count;

   long n;

   while (scanf("%ld",&n)!=EOF){

      count=0;

      for(m=2;m<=n;m++)

      {

         if(prime(m)!=0)

         {

            if(isCircle(m))

            {

                if (count==0) printf("%d",m);

                else printf(" %d",m);

                count++;

                if (count==5) {printf(" ",m);count=0;}

 

            }

         }

      }

      if (count!=0) printf(" ",m);

   }

   return 0;

}

 

int prime(int m)

{

   int i,n;

   if(m==1)  return 0;

   n=sqrt(m);

   for(i=2;i<=n;i++)

      if(m%i==0)

      {

         return 0;

      }

      return 1;

}

int isCircle(int m)

{

   int a;

   a=reverse(m);

   if(a==m)

      return 1;

   else

      return 0;

}

 

int reverse(int i)

{

   int a,j=0;

   a=i;

   while(a)

   {

      j=j*10+a%10;

      a=a/10;

   }

   return j;

}

题目描述

用泰勒展开式计算sin和cos值,当最后一项的绝对值小于0.00001时,累加结束

输入

输入两个正整数x和y,中间有一个空格

输出

sin(x)和cos(y),中间有一个空格

输入

30

30

输出

0.500000

0.866025

提示:

const double PI=3.1415926;

弧度计算公式:x*PI/180, 其x代表你的输入;

代码

#include<stdio.h>

const double PI=3.1415926; 

double mysin(double); 

double mycos(double); 

double myabs(double); 

int main( ) 

{

    double a,b;

    scanf_s("%lf%lf",&a,&b);

    printf("%.6lf ",mysin(PI*a/180));

    printf("%.6lf ",mycos(PI*b/180));

    return 0; 

 

double mysin(double x) 

    double sum=x,x_pow=x,item=x; 

    int n=1,s=1,a=1;       

    while(myabs(item)>0.00001) 

    { 

        s=s*(n+1)*(n+2);

        x_pow*=x*x;

        a=(-1)*a;

        item =x_pow/s*a;

        sum+=item;

        n+=2; 

    } 

    return sum; 

 

double mycos(double x) 

    double sum=1,x_pow=1,item; 

    int n=0,s=1,a=-1; 

    do 

    { 

        s=s*(n+1)*(n+2); 

        x_pow*=x*x; 

        item =x_pow/s*a; 

        sum+=item; 

        a=(-1)*a; 

        n+=2; 

    }while(myabs(item)>0.00001); 

    return sum; 

 

double myabs(double x) 

    return ((x>=0)?x:-x); 

题目描述

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。

输入要求

输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)

输出要求

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;

如果给定的范围内不存在水仙花数,则输出no;

每个测试实例的输出占一行。

假如输入

100 120

300 400

121 200

应当输出

no

370 371

153

提示

 while (scanf_s("%d%d",&m,&n)!=EOF)

#include <stdio.h>

int main()

{

    int m,n;

    while (scanf("%d%d",&m,&n)!=EOF)

    {

        int i,j,count=0,b[3],a[5],t;

        for (i=m; i<=n; i++){

            b[0] = i/100;

            b[1] = i/10%10;

            b[2] = i%10;

            t = b[0]*b[0]*b[0]+b[1]*b[1]*b[1]+b[2]*b[2]*b[2];

            if (i==t) a[count++] = i;

        }

        for (j=0; j<count-1; j++)

            printf("%d ",a[j]);

        if (count) printf("%d ",a[count-1]);

        else printf("no ");

    }

    return 0;

}

原文地址:https://www.cnblogs.com/jlxuqiang/p/3476356.html