衡水学院新人真题百练2022(41-60)

41 统计学生成绩

分数 10

作者 陈建海单位 浙江大学

本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

  • 大于等于90分为A;

  • 小于90且大于等于80为B;

  • 小于80且大于等于70为C;

  • 小于70且大于等于60为D;

  • 小于60为E。

输入格式:

输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出格式:

在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

输入样例:

7
77 54 92 73 60 65 69

输出样例:

1 0 2 3 1
#include<stdio.h>
int main()
{
    int n, N, m, a=0, b=0, c=0, d=0, e=0;
    scanf("%d",&N);
    for(n=0;n<N;n++){
        scanf("%d",&m);
        if(m>=90)
            a++;
        if(m>=80&&m<90)
            b++;
        if(m>=70&&m<80)
            c++;
        if(m>=60&&m<70)
            d++;
        if(m<60&&m>=0)
            e++;
    }
    printf("%d %d %d %d %d",a,b,c,d,e);
    return 0;
}

42 韩信点兵

分数 10

作者 颜晖单位 浙大城市学院

在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:

  • 按从1至5报数,记下最末一个士兵报的数为1;

  • 再按从1至6报数,记下最末一个士兵报的数为5;

  • 再按从1至7报数,记下最末一个士兵报的数为4;

  • 最后按从1至11报数,最末一个士兵报的数为10;

请编写程序计算韩信至少有多少兵。

输入格式:

本题无输入

输出格式:

输出韩信至少拥有的士兵人数。

#include<stdio.h>
int main()
{
    int a;
    for(a=1;;a++)
    {
        if(a%5==1&&a%6==5&&a%7==4&&a%11==10){
            printf("%d",a);
        break;}
    }
}

43 计算阶乘和

分数 15

作者 陈越单位 浙江大学

对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。

输入格式:

输入在一行中给出一个不超过10的正整数N

输出格式:

在一行中输出S的值。

输入样例:

3

输出样例:

9
#include<stdio.h>
int main()
{
    int n, s=1, m, S=0;
    scanf("%d",&n);
    for(m=1;m<=n;m++){
        s=s*m;
    S+=s;
    }
    printf("%d",S);
    return 0;
}

44 猴子吃桃问题

分数 15

作者 徐镜春单位 浙江大学

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:

输入在一行中给出正整数N(1<N≤10)。

输出格式:

在一行中输出第一天共摘了多少个桃子。

输入样例:

3

输出样例:

10
#include<stdio.h>
int main(){
    int a, b=1;
    scanf("%d",&a);
    while(a>1){
        a--;
        b=(b+1)*2;
    }printf("%d",b);
}

45 找出最小值

分数 15

作者 颜晖单位 浙大城市学院

本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:

输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。

输出格式:

在一行中按照“min = 最小值”的格式输出n个整数中的最小值。

输入样例:

4 -2 -123 100 0

输出样例:

min = -123
#include<stdio.h>
int main()
{
    int temp, min, i, n;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&temp);
        if(i==0){
            min=temp;
        }
        if(min>temp){
            min=temp;
        }
    }
    printf("min = %d",min);
}

46 跟奥巴马一起画方块

分数 15

作者 陈越单位 浙江大学

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式:

输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。

输出格式:

输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:

10 a

输出样例:

aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
#include<stdio.h>
int main()
{
    int n,i,j;
    char a;
    scanf("%d ",&n);
    scanf("%c",&a);
    if(n%2==0)  //当n为偶数时
    for(i=1;i<=n/2;i++)   //n/2行
    {
        for(j=1;j<=n;j++)    //每行n个
        {
            printf("%c",a);
        }
        printf("\n");
    }
    if(n%2!=0)    //当n为奇数时
    for(i=1;i<=(n+1)/2;i++)    //(n+1)/2行
    {
        for(j=1;j<=n;j++)   //每行n个
        {
            printf("%c",a);
        }
        printf("\n");
    }
    return 0;
}

47 爬动的蠕虫

分数 15

作者 C课程组单位 浙江大学

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:

输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

输出格式:

在一行中输出蠕虫爬出井的时间,以分钟为单位。

输入样例:

12 3 1

输出样例:

11
#include <stdio.h>
int main(){
int N,U,D;
int min=0;
scanf("%d %d %d",&N,&U,&D);
while(N>0){
if(N>U){
min +=2;
}
else{
min +=1;
}
if(N<=U){
N = N-U;
}
else{
N = N-U+D;
}
}
printf("%d",min);
return 0;
}

48 求整数段和

分数 15

作者 杨起帆单位 浙大城市学院

给定两个整数AB,输出从AB的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数AB,其中−100≤AB≤100,其间以空格分隔。

输出格式:

首先顺序输出从AB的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

输入样例:

-3 8

输出样例:

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30
#include <stdio.h>
int main(){
int a,b,i;
int sum = 0;
int couter = 0;    //用来计数 
scanf("%d %d",&a,&b);
    for(i=a;i<=b;i++){        //i用来记录输出数字 
    sum += i;
    couter++;       
    printf("%5d",i);     //输出5个字符 
    if(couter%5 == 0 && i!=b){   //当计数达到5个的时候,就换行 
    printf("\n");
}
}
printf("\n");            
printf("Sum = %d",sum);
return 0;
}

49 最大公约数和最小公倍数

分数 15

作者 张彤彧单位 浙江大学

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:

511 292

输出样例:

73 2044
#include<stdio.h>
int main()
{
int a,b,i,j;
int max=0;
scanf("%d%d",&a,&b);
for(j=1;j<=a;j++)//求最大公约数
{
if(a%j==0&&b%j==0)//让a和b分别除以j(j从一开始,j有上限要小于等于a或b)
//利用j++,如果a和b能同时除尽j
{
if(max<j)//再判断j是不是小于a或b的最大公约数,不是则赋值最大值
max=j;//这样求出来的max即为最大公约数
}
}
    for(i=a;;i++)//求最小公倍数
{
if(i%a==0&&i%b==0)//用大于等于a和b的数i(i大于等于a和b,无上限)分别除以a和b,同时除尽的第一个数即为最小公倍数
break;//然后循环结束
}
printf("%d %d\n",max,i);//最后最大公约数用max表示了
return 0;
} 

50 特殊a串数列求和

分数 20

作者 颜晖单位 浙大城市学院

给定两个均不超过9的正整数an,要求编写程序求a+aa+aaa++⋯+aaana)之和。

输入格式:

输入在一行中给出不超过9的正整数an

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246
 #include <stdio.h>
int main()
{
    int a, n;
    int s=0, item=0;//不要忘了初始值
    scanf("%d %d", &a, &n);
    for (int i = 0; i < n; i++)
    {
        item = 10 * item + a;
        s += item;
    }
    printf("s = %d",s);
    return 0;
}

51 输出闰年

分数 20

作者 陈建海单位 浙江大学

输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:

输入在一行中给出21世纪的某个截止年份。

输出格式:

逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

输入样例1:

2048

输出样例1:

2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048

输入样例2:

2000

输出样例2:

Invalid year!
#include<stdio.h> 
int main()
{
 int year,t;
 scanf("%d",&year);
 if(year<=2000||year>2100){
  printf("Invalid year!"); //非21世纪 
 }
 else {
  for(int i=2001;i<=year;i++){
   if(i%4==0&&i%100!=0||i%400==0){ //&&表示且,||表示或 
    printf("%d\n",i);
   }
  } 
 }
 if(year<2004&&year>2000){
  printf("None");//无闰年 
 }
 return 0;
}

52 统计素数并求和

分数 20

作者 张彤彧单位 浙江大学

本题要求统计给定整数MN区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数MN(1≤MN≤500)。

输出格式:

在一行中顺序输出MN区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143
#include <stdio.h> 
int main()
{
int count = 0, sum = 0;
int m, n;
int i, j;
scanf("%d %d", &m, &n);
for (i = m; i <= n; i++)//开始在俩个数之间循环
{
for (j = 2; j <= i; j++)//找出能整除的数
{
if (i % j == 0) break;//找到了就打破循环
}
if (j == i) //如果找出的数与本身相等,说明这个数是质数
{
sum += i;
count += 1;
}
}
printf("%d %d", count, sum);
return 0;
}

53 打印沙漏

分数 20

作者 陈越单位 浙江大学

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0, j = 0, k = 0;
int num = 0,hangshu=0,shengyu=0;
char ch = 0;
scanf("%d %c", &num, &ch);
int temp = (num + 1) / 2;
hangshu = (int)sqrt(temp);//计算上半部分行数
for (i = 0;i < hangshu;i++)
{
for (j = 0;j < i;j++)
{
printf(" ");
}
for (k = 0;k < 2 * (hangshu - i) - 1;k++)
{
printf("%c", ch);
}
printf("\n");
}
for (i = 1;i < hangshu;i++)
{
for (j = hangshu - i - 1;j > 0;j--)
{
printf(" ");
}
for (k = 0;k < 2 * (i + 1) - 1;k++)
{
printf("%c", ch);
}
printf("\n");
}
shengyu = num - (2 * hangshu * hangshu - 1);
printf("%d", shengyu);
return 0;
}

54 找完数

分数 20

作者 陈建海单位 浙江大学

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数mn之间的所有完数。

输入格式:

输入在一行中给出2个正整数mn(1<mn≤10000),中间以空格分隔。

输出格式:

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:

2 30

输出样例:

6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
#include<stdio.h>
int main()
{
int a,b,i,j,s,k,m=0;
scanf("%d %d",&a,&b);//输入两个数
for(i=a;i<=b;i++)
{
s=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
s+=j;
}
}
if(s==i)//判断是否是完数
{
printf("%d = 1",i);//为了简单输出  先把“完数 = 1”打印出来 因为肯定会有1
for(k=2;k<j;k++)//重复操作
{
if(i%k==0)
{
printf(" + %d",k);//注意加号前后面都有 空格
}
}
printf("\n");//换行  否则有两个及两个以上的完数会一行输出
m++;//判断完数个数  方便没有时输出None
}
}
if(m==0)
{
printf("None\n");
}
return 0;
}

55 梅森数

分数 20

作者 颜晖单位 浙大城市学院

形如2n−1的素数称为梅森数(Mersenne Number)。例如22−1=3、23−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了231−1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。

本题要求编写程序,对任一正整数nn<20),输出所有不超过2n−1的梅森数。

输入格式:

输入在一行中给出正整数nn<20)。

输出格式:

按从小到大的顺序输出所有不超过2n−1的梅森数,每行一个。如果完全没有,则输出“None”。

输入样例:

6

输出样例:

3
7
31
#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,j,k;
    int flag=1;                     //判断是否是素数
    scanf("%d",&n);
    if(n<2)
        printf("None");             //小于2的不存在梅森数
    for(i=2;i<=n;i++)
    {
        flag=1;
        k=pow(2,i)-1;
        for(j=2;j<k;j++)
        {
            if(k%j==0)              //不是素数
            {
                flag=0;
                break;
            }
        }
        if(flag)
            printf("%d\n",k);         //梅森数
    }
}

56 生成3的乘方表

分数 20

作者 C课程组单位 浙江大学

输入一个非负整数n,生成一张3的乘方表,输出30~3n的值。可调用幂函数计算3的乘方。

输入格式:

输入在一行中给出一个非负整数n

输出格式:

按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。

输入样例:

3

输出样例:

pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
#include<stdio.h>
#include<math.h>
int main()
{
int n , a ;
scanf("%d",&n) ;
for(int i=0;i<=n;i++){
a=pow(3,i) ;
printf("pow(3,%d) = %d\n",i,a) ;
}
 } 

57 输出三角形字符阵列

分数 20

作者 颜晖单位 浙大城市学院

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:

输入在一行中给出一个正整数n(1≤n<7)。

输出格式:

输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例:

4

输出样例:

A B C D 
E F G 
H I 
J 
#include<stdio.h>
int main()
{
int n;
char ch='A';
scanf("%d", &n);
for (int i = 0;i < n;i++) {
for (int j = n-i;j > 0;j--) {
printf("%c ", ch);
ch++;
}
printf("\n");
}
return 0;
}

58 求最大值及其下标

分数 20

作者 C课程组单位 浙江大学

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6
2 8 10 1 9 10

输出样例:

10 2
#include<stdio.h>
int main()
{
    int n,max,count=0,input,max_count=0;
    scanf("%d",&n);
    scanf("%d",&max);
    while(1==scanf("%d",&input))
        for( count++;max<input;max_count=count)max=input;
    printf("%d %d",max,max_count);
}

59 将数组中的数逆序存放

分数 15

作者 C课程组单位 浙江大学

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:

输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

输入样例:

4
10 8 1 2

输出样例:

2 1 8 10
#include<stdio.h>
int main(){
  int a[11], i, n;
  scanf("%d", &n);
  for(i = 1; i <= n; i++){   //将输入数依次赋值给数组a的n个元素;
    scanf("%d", &a[i]);
  }
  for(i = n; i >= 1; i--){
    printf("%d", a[i]);
    if(i == 1) continue;
    printf(" ");
  }
  return 0;
}

60 选择法排序

分数 20

作者 C课程组单位 浙江大学

本题要求将给定的n个整数从大到小排序后输出。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6

输出样例:

7 6 5 1
#include<stdio.h>
int main(){
    int n,temp;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[j]>a[i]){
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    printf("%d",a[0]);
    for(int i=1;i<n;i++){
        printf(" %d",a[i]);
    }
    return 0;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还没有名字哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值