PTA | C期末复习

5-1 特别的数

分数 10 作者 yjs 单位 福州大学至诚学院

如果用0至9之间不同的三个数构成一个三位数,且各位数字之和是5,下面程序将输出这些数,并统计出共有多少种方法,请把程序补充完整。

#include<stdio.h>
int main(){
    int i,j,k,count;
    ____________;
    for(_______;i<=9;i++)
        for(j=0; j<=9; j++)
            for(k=0;k<=9;k++)
                if(_________&&i+j+k==5){
                    count++;
                    printf("第%d种方案:能构成%d。\n",__________);
                }
    return 0;
}

5-2 在屏幕上输出如下所示的九九乘法表:

分数 6 作者 王宇 单位 集美大学诚毅学院

编写程序,在屏幕上输出如下所示的九九乘法表:

#include<stdio.h>
int main(){
    int i,j;
    for(i=1;i<=9;i++){
        printf("%-4d",i);
    }
    printf("\n");
    printf("--------------------------------------------\n");
    for(i=1;i<=9;i++){
        for(_________)//控制每个输出数字前输出的空格
        {
            printf("    ");
        }
        for(j=i;j<=9;j++){
            _________;
        }
        printf("\n");
    }
    return 0;
}

5-3 输出一个整数的逆序数

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

输入一个整数,输出其逆序数。要求定义并调用函数reverse(int number),它的功能是返回number的逆序数。例如reverse(-12345)的返回值是-54321reverse(120)的返回值是21

int reverse(int number){
    int digit,flag,res;
    _______;
    flag=number<0?-1:1;
    if(______){
        number=-number;
    }
    do{
        digit=number%10;
        res=_______;
        number/=10;
    } while(number!=0);
    return flag*res;
}

5-4 判断正整数从高位到低位的各位数字是否按值从小到大排列

分数 6 作者 zhangweina 单位 赤峰学院

输入一个正整数,判断该数从高位到低位的各位数字是否按值从小到大排列。要求定义和调用函数fun(m)判断m中各位数字是否按值从小到大排列,满足条件返回1,否则返回0。

#include <stdio.h>
_________;
int main(void){
    int n;
    scanf("%d",&n);
    if(_____)
        printf("yes\n");
    else
        printf("No\n");
    return 0;
}

int fun(int m){
    int cur_digit,old_digit=m%10;
    while(m>10){
        m=m/10;
        cur_digit=m%10;
        if(cur_digit>=old_digit){
            return 0;
        }
        ________;
    }
    return 1;
}

5-5 计算二维数组中奇数元素之和

分数 7 作者 李军 单位 陕西理工大学

下面的程序是计算二维数组中奇数元素之和的程序。请填写空缺的代码。

#include <stdio.h>
int sumOdd(int(*array)[5],int row){
    int sum=______;
    for(int i=0; i<row; i++)
        for(int j=0; j<5; j++)
            if(_______) sum+=______;
    return sum;
}
int main(){
    int array[4][5];
    for(int i=0; i<4; i++)
        for(int j=0; j<5; j++)
            scanf("%d",_____);
    printf("%d\n",sumOdd(_____));  //注意:填空处两端均已有括号,只需填函数参数
    return 0;
}

5-6 函数的定义与调用(素数问题)

分数 10 作者 吴光生 单位 新余学院

一个大于1的自然数N,如果除了1和它本身之外,不能被其他自然数整除,换句话说,就是该数N除了1和它本身以外不再有其他的因数,则N为素数(质数)。

下列程序中,函数prime的功能是判断参数n是否为一个素数,是则返回1,不是则返回0。在主函数中遍历10到20之间的整数,是素数的就输出到屏幕(每个数字占5列,右对齐)。

请将空缺的代码填写完整。

#include<stdio.h> 
int prime(int n)  /*判断n是否为一个素数,是则返回1,不是则返回0*/
{
    int i,flag;
    if(n<=1)
        return 0;
    flag=___;
    for(i=2;____;i++)
        if(n%i==0){
            flag=0;
            break;
        }
    return flag;
}

int main(){
    int n;
    for(n=10; n<=20; n++)
        if(____)    /*如果n是素数,则输出n*/
            printf("%5d",n);
    return 0;
}

5-7 判断二维数组是否对称

分数 6 作者 zhangweina 单位 赤峰学院

检查n阶方阵a中的所有元素是否都沿主对角线对称,即对所有i,j都满足a[i][j]和a[j][i]的值相等,假定所有变量都已正确定义并赋值,请填空。

found=1;  //标志变量,1代表对称,0代表不对称
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        if(____){
            _____;
            break;
        }
    }
    if(_____)  break;
}
if(found!=0)   printf("对称\n");
else   printf("不对称\n");

5-8 选择法排序

分数 10 作者 zhangweina 单位 赤峰学院

选择法排序:本题要求将给定的n个整数从小到大排序后输出。输出时相邻数字中间用一个空格分开,注意:行末不得有多余空格。

#include <stdio.h>
#define MAXN 10
int main(){
    int a[MAXN];
    int n,k,i,index,temp;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(k=0;k<n-1;k++){
        index=____;
        for(____)
            if(____)
                index=i;
        ______;
        ______;// 多行
    }
    for(i=0;i<n;i++){
        if(____)
            printf("%d",a[i]);
        else
            printf(" %d",a[i]);
    }
    return 0;
}

5-9 字符串复制

分数 2 作者 zhangweina 单位 赤峰学院

以下程序段的功能是:将字符串str1的内容复制到字符串str2,请填空。

// 程序写在这里。下面的空分值是3分。
char str1[80],str2[81];
int i;
gets(str1);
i=0;
while(___){
    str2[i]=str1[i];
    i++;
}
str2[i]='\0';
puts(str2);

5-10 从字符串中删除指定的字符

分数 6 作者 王才善 单位 兰州交通大学

从键盘读入一串字符,再输入一个字符,从字符串中删除这个输入的字符。

#include<stdio.h>
int main(){
    char str[100],ch,*pt;
    int i=0;
    gets(str);
    ch=getchar();
    pt=str;
    while(____){
        while(____)
            pt++;
        str[i++]=*pt;
        if(*pt!='\0')
            ____;
    }
    str[i]='\0';
    puts(str);
    return 0;
}

输入样例

This is a sample string!
s

输出样例

Thi i a ample tring!

5-11 方阵转置

分数 4 作者 李廷元 单位 中国民用航空飞行学院

在空白处填写正确的代码。输入一个正整数 \(n (1<n≤6)\) ,根据生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。

#include <stdio.h>
int main(){
    int i,j,n,t;
    int a[6][6];
    scanf("%d",&n);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            a[i][j]=i*n+j+1;      /* 生成方阵 */
    for(i=0; i<n; i++)               /*  方阵转置  */
        for(j=____;j<n;j++){
            _______;
        }
    for(i=0; i<n; i++){
        for(j=0; j<n; j++)
            printf("%4d",a[i][j]);
        putchar('\n');
    }
    return 0;
}

5-12 统计一行单词数

分数 8 作者 杨嫘 单位 桂林学院

输入一行字符,统计其中有多少个单词。假设单词之间以空格分开。 提示:当前被检验字符不是空格,而前一个被检验字符是空格,则表示有新单词出现。 根据上述功能,补全如下代码(请不要填写多余的空格)。

#include <stdio.h>
#define N 20
int CountWords(char str[]);
int main(){
    char str[20];
    _____;
    printf("Numbers of words=%d\n",_____);
    return 0;
}
int CountWords(char str[]){
    int i,num;
    num=(str[0]!=' ')?1:0;
    for(i=1;_____;i++){
        if(str[i]!='\0'&&_____){
            num++;
        }
    }
    return num;
}

5-13 过滤掉字符串中的非字母字符

分数 8 作者 余贞侠 单位 成都信息工程大学

请编写一个函数fun,函数的功能是:输入一个字符串,过滤此串,只保留串中的字母字符。

#include<stdio.h>
int main(){
    char str[100],* p1,* p2;
    gets(str);
    for(____;*p2!='\0';_____){
        if((*p2>='A')&&(*p2<='Z')||(*p2>='a')&&(*p2<='z')){
            *p1=*p2;
            ______;
        }
    }
    ______;
    printf("%s",str);
    return 0;
}

5-14 将数组中的元素逆序存放

分数 4 作者 余贞侠 单位 成都信息工程大学

本题目要求编写一个函数,用指针将数组中的元素逆序存放。

#include <stdio.h>
void Rev(int* x,int n);
int main(){
    int i,a[10]={ 3,7,9,11,0,6,7,5,4,2 };
    int* p;
    ______;//调用逆序函数
    printf("The array has been reverted:\n");
    for(_______;p++)
        printf("%d,",______);
    return 0;
}
void Rev(int* x,int n){
    int t,* p,* i,* j,m=(n-1)/2;
    i=x;  j=x+n-1;  p=x+m;
    for(;i<=p;i++,j--){
        _______;
    }
}

5-15 二级指针实现字符串排序

分数 5 作者 余贞侠 单位 成都信息工程大学

在主函数中输入\(N\)个字符串,调用func()函数用选择排序算法对他们进行升序排序,然后输出已经排好序的字符串。 要求使用指针数组进行处理。

#include <stdio.h>
#include <string.h>
#define N 5
void func(char** str);
int main(void){
    int i;
    char s[N][1024],* pStr[N];
    for(i=0; i<N; i++){
        gets(s[i]);
        ____;
    }
    func(pStr);
    //输出排序后的结果
    for(i=0; i<N; i++)
        puts(pStr[i]);
    return 0;
}
void func(char** str){
    char* temp;
    int i,j,min;
    for(i=0;i<N-1;i++){
        min=i;
        for(j=i+1;j<N;j++)
            if(strcmp(str[min],str[j])>0)
                ____;
        if(min!=i){
            ____;
            ____;
            ____;
        }
    }
}

5-16 指针与二维数组

分数 10 作者 jibaoyu 单位 江西理工大学

下面的程序段对于二维数组a: (1)使用数组名a采用地址法访问数组元素 (2)指向一个有4个整型(int)变量的指针变量来访问数组元素 请填空完成程序的功能。

样例程序:

#include<stdio.h>
int main(){
    int a[3][4]={ 1,2,3,4,5,6,7,8,9,10,11,12 };
    int i,j;
    for(i=0;i<3;i++){
        for(j=0;j<4;j++)
            printf("%3d",____);//用数组名使用地址法访问a[i][j]
        printf("\n");
    }
    ____;
    //定义指向一行(4个int)变量的指针变量p
    p=a;
    for(i=0;i<3;i++){
        for(j=0;j<4;j++)
            printf("%3d",____);//用指针变量p地址法访问数组元素a[i][j]
        printf("\n");
    }
    return 0;
}

5-17 单链表结点删除

分数 6 作者 俞宗佐 单位 内蒙古师范大学

本题目要求补全函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。

其中的结构体定义如下:

struct ListNode{
    int data;
    struct ListNode* next;
};
struct ListNode* deletem(struct ListNode* L,int m){
    struct ListNode* head,* p1,* p2;
    head=L;
    while(____&&head->data==m){
        ____;
        head=head->next;
        free(p2);
    }
    if(head==NULL) return head;
    p1=head;
    p2=head->next;
    while(____){
        if(p2->data==m){
            p1->next=p2->next;
            ____;
            p2=p1->next;
        } else{
            p1=p2;
            p2=p2->next;
        }
    }
    return head;
}

5-18 删除单链表偶数节点

分数 6 作者 俞宗佐 单位 内蒙古师范大学

本题要求补全函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。 链表结点定义如下:

struct ListNode{
    int data;
    struct ListNode* next;
};
struct ListNode* deleteeven(struct ListNode* head){
    struct ListNode* p1,* p2;
    while(head!=NULL&&____){
        p2=head;
        head=head->next;
        free(p2);
    }
    if(head==NULL) return head;
    ____;
    p2=p1->next;
    while(p2!=NULL){
        if(p2->data%2==0){
            p1->next=p2->next;
            free(p2);
            ____;
        } else{
            p1=p2;
            p2=p1->next;
        }
    }
    return head;
}

5-19 递归求单链表的最大值

分数 4 作者 李廷元 单位 中国民用航空飞行学院

本题要求求出不带头结点的单链表中的最大值并返回。

/* 求单链表值最大的结点 */
int getMaxNode(LinkNode* head){
    if(head==NULL)
        return INT_MIN;
    int first=head->data;
    int m=____;
    if(m>first)return m;
    else return first;
}

5-20 一年的第几天

分数 5 作者 王从银 单位 吉首大学

输入某年某月某日,判断这一天是这一年的第几天?

#include <stdio.h>
int main(){
    int year,month,day;
    int sum;
    int leap;
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d %d %d",____);
        switch(____){
        case 1:
            sum=0;
            break;
        case 2:
            sum=31;
            break;
        case 3:
            sum=59;
            break;
        case 4:
            sum=89;
            break;
        case 5:
            sum=120;
            break;
        case 6:
            sum=151;
            break;
        case 7:
            sum=181;
            break;
        case 8:
            sum=212;
            break;
        case 9:
            sum=243;
            break;
        case 10:
            sum=273;
            break;
        case 11:
            sum=304;
            break;
        case 12:
            sum=334;
            break;
        _____:
            printf("data error");
            break;
        }
        sum+=day;

        if(year%400==0||(year%4==0&&year%100!=0))
            leap=1;
        else
            leap=0;
        if((leap==1)&&(month>2&&month<=12))  sum++;
        printf("It is the %dth day.",sum);
    }
    return 0;
}

6-1 编写函数:将字符串中的第m个字符开始的字符子串复制成另一个字符串(指针作为函数的参数)

分数 10 作者 jibaoyu 单位 江西理工大学

编写函数:将字符串中的第\(m\)个字符开始的字符子串复制成另一个字符串(指针作为函数的参数)

源字符串及\(m\)在主函数输入,复制后,在主函数输出目标字符串。

函数接口定义:

在这里描述函数接口。例如:

void copy(char *p,int m,char *p2);

裁判测试程序样例:

#include<stdio.h>
void copy(char *p,int m,char *p2);
int  main(){
    char s[1000],d[1000];
    int m;
    gets(s);
    scanf("%d",&m);    
    copy(s,m,d);
    puts(d);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

1234abcdef higk
5

输出样例:

在这里给出相应的输出。例如:

abcdef higk

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void copy(char *p,int m,char *p2){
    int i=0;
    while(p[i+m-1]!='\0'){
        p2[i]=p[i+m-1];
        i++;
    }
    p2[i]='\0';
}

6-2 求最大公约数

分数 10 作者 赵静静 单位 浙江工贸职业技术学院

正在上小学的弟弟请教小明一道数学题:分别求\(18\)\(45\)\(242\)\(154\),以及\(1011087\)\(1221183\)的最大公约数。小明觉得第三组数据太大,于是他编程来求解。

本题要求编写一个求最大公约数的函数,函数接收两个非负整数,返回两数的最大公约数。例如函数接收\(18\)\(45\),该函数应该返回\(9\)

函数接口定义:

在这里描述函数接口。例如:

int gcd(int a,int b);

在这里解释接口参数。例如:其中 ab 都是用户传入的参数,函数须返回 ab 的最大公约数。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
int gcd(int a,int b);
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d和%d的最大公约数为: %d",a,b, gcd(a,b));
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

18 45

输出样例:

在这里给出相应的输出。例如:

18和45的最大公约数为: 9

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int gcd(int a,int b){
    if (b==0) return a;
    else return gcd(b,a%b);
}

6-3 求两数最小公倍数的函数lcm

分数 10 作者 赵静静 单位 浙江工贸职业技术学院

题目要求定义两数(正整数)最小公倍数的函数,当两个数任何一个数非正数时,函数返回\(-1\)

函数接口定义:

在这里描述函数接口。例如:

int multiple(int x,int y);

在这里解释接口参数。例如:其中 xy 都是用户传入的参数,其值取正数,函数返回xy 的最小公倍数,当 xy 为非正数时,函数返回 \(-1\)

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
int multiple(int x,int y) ;
int main(void) {
    int x,y;
    scanf("%d %d",&x,&y);
    printf("%d 和 %d 的最小公倍数为: %d",x,y, multiple(x,y));
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

18 45

输出样例:

在这里给出相应的输出。例如:

18 和 45 的最小公倍数为: 90

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int multiple(int x,int y){
    if(x<=0 || y<=0)    return -1;
    int a=x,b=y;
    while(b!=0){
        int t=a;
        a=b;
        b=t%b;
    }
    return x*y/a;
}

6-4 编写函数fun,求给定正整数n以内的素数之积

分数 10 作者 赵静静 单位 浙江工贸职业技术学院

编写函数fun其功能是:求给定正整数\(n\)以内的素数之积,其中\((n<28)\),函数返回积。

函数接口定义:

在这里描述函数接口。例如:

long fun(int n);

在这里解释接口参数。例如:其中 \(n\) 是用户传入的参数, \(n\) 的值的范围为\(n<28\) , 函数须返回\(n\)以内的素数的积。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
long fun(int n);
int main() {
    int n;
    scanf("%d", &n);
    if(n>=28 || n< 2){
        printf("error");
    } else{
        //输出
        printf("result = %ld\n", fun(n));
    }
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

10

输出样例:

在这里给出相应的输出。例如:

result = 210

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int isprime(int n){
    if(n<=1)    return 0;
    if(n==2)    return 1;
    if(n%2==0)  return 0;
    for(int i=3;i<n/2+1;i+=2){
        if(n%i==0)  return 0;
    }
    return 1;
}

long fun(int n){
    long product=1;
    for(int i=2;i<n;i++){
        if(isprime(i))  product*=i;
    }
    return product;
}

6-5 统计一个整数的位数。

分数 15 作者 林方圆 单位 广东东软学院

本题要求实现一个函数,可统计任一输入的整数的位数。例如输入\(12345\),输出位数\(5\),输入\(-20\)输出位数\(2\),输入\(0\),输出位数\(1\)

函数接口定义:

函数接口定义如下:

int Count_Number (int N);

其中 N 是用户传入的参数。 N 的值不超过int的范围。函数返回 N 的位数,函数实现时,需使用while循环,不得使用for或者do-while循环。

裁判测试程序样例:

#include <stdio.h>
int Count_Number (int N);
int main(){
    int N,D=0;
    scanf("%d",&N);
    D=Count_Number(N);
    printf("%d",D);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

12345

输出样例:

在这里给出相应的输出。例如:

5

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int Count_Number(int N){
    int res=0;
    if(N==0){
        return 1;
    }
    while(N!=0){
        N/=10;
        res++;
    }
    return res;
}

6-6 求两个非负整数的最大公约数

分数 6 作者 李军 单位 陕西理工大学

本题要求编写一个函数,用该函数来求解两个非负整数的最大公约数。

函数接口定义:

int GCD(int a,int b);

a 和 b 都是用户传入的两个整数。

裁判测试程序样例:

#include <stdio.h>
/* 请在这里填写你的函数 */
int main(){
    int x,y;
    scanf("%d %d",&x,&y);
    printf("The greatest common divisor of %d and %d is %d.\n",x,y,GCD(x,y));
    return 0;
}

输入样例1:

6 8

输出样例1:

The greatest common divisor of 6 and 8 is 2.

输入样例2:

21 8

输出样例2:

The greatest common divisor of 21 and 8 is 1.

代码长度限制 16 KB 时间限制 50 ms 内存限制 64 MB

Code

int GCD(int a,int b){
    if (b==0) return a;
    else return GCD(b,a%b);
}

6-7 用多项式来近似表示余弦函数cosx

分数 20 作者 李军 单位 陕西理工大学

在数学上对一些复杂的函数,常用多项式来近似表示函数。例如正弦函数cosx是用如下多项式来近似表达的:

\[ \cos(x) \approx 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \ldots + (-1)^{n-1} \frac{x^{2n-2}}{(2n-2)!} \]

在实际计算时当多项式尾项 $ (-1)^{n-1} $ 的绝对值小于一个预定值 \(ε\)(例如 \(10^{−5}\) 或 $ 10^{-6} $ 时可认为达到了计算精度要求,结束计算。请根据题目描述编写函数计算在 \(x\in[0,π]\) 处点的余弦值。

编程要求:

编写两个函数,一个是求cosx的函数MyCos(x),另一个是求n!的函数fact(n)。在函数MyCos(x)中调用fact(n)函数。其中公式中的 \(x^n\) 可用库函数pow(x,n)来实现。

函数接口定义:

求n!的函数接口:

double fact(int n);  
参数n是要求阶乘的数,是一个整数类型的参数,函数的返回值为double型.

sinx值的函数:

double MyCos(double x,double epsilon);
其中xcosx的自变量参数,epsilon是计算精度要求参数。

裁判测试程序样例:

#include <stdio.h>
/* 请在这里填写答案 */
int main(){
    double x,epsilon;
    scanf("%lf%lf",&x,&epsilon);
    printf("%.15f\n",MyCos(x,epsilon));
    return 0;
}

输入说明:

在一行内输入两个数,两数之间用空格间隔,其中第一个数是自变量的值,第二者数是计算精度要求值。

输出说明:

输出一个值,输出保留17位小数。

输入样例:

1.1 0.000000000001

输出样例:

0.453596121425359

代码长度限制 1 KB 时间限制 30 ms 内存限制 1 MB

Code

double fact(int n){
    double res=1.0;
    for(int i=2;i<=n;i++){
        res*=i;
    }
    return res;
}
double MyCos(double x,double epsilon){
    double item=1.0;
    double res=0.0;
    int i=1;
    while(item>epsilon){
        if(i%2==1)  res+=item;
        else res-=item;
        item=pow(x,2*i)/fact(2*i);
        // item*=x*x;
        // item/=2.0*i*(2*i-1);
        i++;
    }
    return res;
}

6-8 输出指定范围内的自守数

分数 15 作者 袁恩 单位 中国人民解放军陆军工程大学

所谓自守数(也称守形数),是指其平方数的低位部分恰为该数本身的自然数。例如: \(25*25=625\) , 因此 \(25\) 是自守数。 注:\(0\)\(1\) 也算自守数。

编写程序输出指定范围内的自守数,没有的话输出None

函数接口定义:

判断x是否为自守数:

int IsAutomorphic(int x);
输出在lowerupper区间内的自守数,没有输出None
void FindAutomorphic(int lower, int upper);
其中 x 是用户传入参数,它需要被判断的数。

lowerupper 都是用户传入的参数。 FindAutomorphic程序输出[lower, upper]区间内的自守数。

裁判测试程序样例:

#include <stdio.h>
int IsAutomorphic(int x);
void FindAutomorphic(int lower, int upper);
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    FindAutomorphic(a,b);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

10 100

输出样例:

25
76

输入样例:

400 500

输出样例:

None

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int IsAutomorphic(int x){
    int digits=1;
    int t=x;
    while(t>0){
        t/=10;
        digits*=10;
    }
    if(x*x%digits==x){
        return 1;
    }
    return 0;
}
void FindAutomorphic(int lower,int upper){
    int found=0;
    for(int i=lower;i<=upper;i++){
        if(IsAutomorphic(i)){
            printf("%d\n",i);
            found=1;
        }
    }
    if(found==0){
        printf("None\n");
    }
}

6-9 输出冒泡排序中间结果

分数 15 作者 袁恩 单位 中国人民解放军陆军工程大学

输入两个数\(n\)\(m\)\(n\)为需要排序的数的个数,\(m\)为冒泡排序的轮数。一轮是指一次完整冒泡过程。 然后,输入一组不超过\(10\)个的整数,用冒泡排序法从大到小的排序,根据\(m\)输出第\(m\)轮冒泡后的中间结果。

函数接口定义:

void sort(int a[],int n,int m)

其中 数组\(a\) 、整数\(n\) 和整数\(m\) 都是用户传入的参数。 \(a\) 存储了未排序的\(n\)个数,\(m\)为排序的轮数。函数实现冒泡排序输出中间排序结果。

裁判测试程序样例:

#include <stdio.h>
#define N 10
void sort(int a[],int n,int m);
int  main(){
    int a[N],n,m,i;
    scanf("%d%d",&n,&m);
    sort(a,n,m);
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
/* 请在这里填写答案 */

输入样例:

5 2
5 1 3 6 8

输出样例:

8 6 5 1 3 

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void sort(int a[],int n,int m){
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<m;i++){
        for(int j=n-2;j>=i;j--){
            if(a[j+1]>a[j]){
                int t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    // for(int k=0;k<n;k++){
    //     printf("%d ",a[k]);
    // }
    // printf("\n");
}

6-10 选择排序

分数 100 作者 王群芳 单位 合肥师范学院

题目描述

从键盘输入某班学生某门课程的成绩(每班人数最多不超过\(40\)人),当输入为负值时,表示输入结束。本题要求实现用选择排序法将分数从高到低排序(并输出每趟排序结果)的函数。

函数接口定义:

void DataSort(int score[], int n); 

其中 score 是用户传入的学生成绩数组, \(n\) 是学生人数。

裁判测试程序样例:

#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[],int n);
void PrintScore(int score[],int n);
int main(){
    int score[N],n;
    n=ReadScore(score);
    printf("n=%d\n",n);
    if(n){
        DataSort(score,n);
        printf("After sort: ");
        PrintScore(score,n);
    }
    return 0;
}
int ReadScore(int score[]){
    int i=-1;
    do{
        i++;
        scanf("%d",&score[i]);
    } while(score[i]>=0);
    return i;
}
/* 你的代码将被嵌在这里 */
void PrintScore(int score[],int n){
    int i;
    for(i=0; i<n; i++){
        if(i!=0)  printf(" ");
        printf("%d",score[i]);
    }
    printf("\n");
}

输入样例:

64 85 73 99 92 -1

输出样例:

n=5
第1趟:99 85 73 64 92
第2趟:99 92 73 64 85
第3趟:99 92 85 64 73
第4趟:99 92 85 73 64
After sort: 99 92 85 73 64

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void DataSort(int score[], int n){
    for(int i=0;i<n-1;i++){
        int max=i;
        for(int j=i+1;j<n;j++){
            if(score[j]>score[max]) max=j;
        }
        if(max!=i){
            int t=score[i];
            score[i]=score[max];
            score[max]=t;
        }
        printf("第%d趟:",i+1);
        PrintScore(score,n);
    }
}

6-11 编写一个函数实现一维数组的元素从小到大排列

分数 5 作者 jibaoyu 单位 江西理工大学

编写一个函数实现一维数组的元素从小到大排列。

函数接口定义:

void sort(int a[],int n);

其中:\(a\) 为一维数组,\(n\) 为数组的长度。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
#define N 5
void input(int a[],int n);
void output(int a[],int n);
void sort(int a[],int n);
/* 请在这里填写答案 */
void input(int a[],int n){
    int i;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
}
void output(int a[],int n){
    int i;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("\n");
}
int main(){
    int a[N];
    input(a,N);
    sort(a,N);
    output(a,N);
    return 0;
}

输入样例:

在这里给出一组输入。例如:

12 44 31 55 32

输出样例:

在这里给出相应的输出。例如:

12 31 32 44 55 

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void sort(int a[],int n){
    for(int i=0;i<n;i++){
        for(int j=0;j<n-1-i;j++){
            if(a[j]>a[j+1]){
                int t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
}

6-12 编程实现strncpy函数功能

分数 20 作者 陶利 单位 合肥师范学院

本题要求编程实现"n"族字符串拷贝函数功能strncpy(),而不使用标准库自带函数。

函数接口定义:

char *MyStrNcpy(char *dst, const char *src, int n);

此函数把字符串src中的前n个字符复制到到dst所指向的内存空间。 * 如果src指向的字符串少于n个字符,则将'\0'加到dst的尾部,直到满足\(n\)个字符为止; * 如果src指向的字符串大于n个字符,则拷贝src的前 \(n\) 个字符到dst; * 返回指向dst的指针。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
#define N 10
char *MyStrNcpy(char *dst, const char *src, int n);
int main(){
    char arr_dst[N] = "AAAAAAAAA";
    char arr_src[N] = { ‘\0};   
    gets(arr_src);//输入源字符串
    int n;
    scanf("%d",&n);//输入拷贝长度
    char * new_dst;//函数调用返回目的字符串指针
    new_dst = MyStrNcpy(arr_dst, arr_src, n);
    printf("%s\n", new_dst);//打印输出
    return 0;
}
/* 请在这里填写答案 */

输入样例1:

China
2

输出样例1:

ChAAAAAAA

输入样例2:

China
6

输出样例2:

China

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

char* MyStrNcpy(char* dst,const char* src,int n){
    int len_src=0;
    while(src[len_src++]!='\0');
    if(len_src>n){
        for(int i=0;i<n;i++){
            dst[i]=src[i];
        }
    }else{
        for(int i=0;i<len_src;i++){
            dst[i]=src[i];
        }
        dst[len_src]='\0';
    }
    return dst;
}

6-13 数组区间逆序

分数 20 作者 fang 单位 广东东软学院

本题要求实现一个函数,可以输出一个数组第\(i\)个元素到第\(j\)个元素之间的逆序排列后的结果。(\(i\)\(j\)均为不超过\(n\)的正整数正整数且\(i \leq j\)

函数接口定义:

void Reverse ( int *a, int n, int i, int j);

其中 \(n\)\(i\)\(j\) 都是用户传入的参数。 \(n\) 是数组长度,其值不超过int的范围; \(i\)\(j\)\((0, n]\) 区间内的整数。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
void Reverse(int* a,int n,int i,int j);
int main(){
    int n,i,j;
    scanf("%d %d %d",&n,&i,&j);
    int a[n];
    for(int x=0; x<n; x++){
        scanf("%d",&a[x]);
    }
    Reverse(a,n,i,j);
    for(int x=0; x<n; x++){
        printf("%d ",a[x]);
    }
    return 0;
}
/* 请在这里填写答案 */

输入样例:

10 3 5
1 2 3 4 5 6 7 8 9 10

输出样例:

1 2 5 4 3 6 7 8 9 10 

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void Reverse(int* a,int n,int i,int j){
    int begin,end;
    if(i>0 && i<=j && j<=n){
        begin=i-1;
        end=j-1;
    }else{
        return;
    }
    while(begin<end){
        int temp=a[begin];
        a[begin]=a[end];
        a[end]=temp;
        begin++;
        end--;
    }
}

6-14 查找数组最大值和最小值

分数 15 作者 Hzy 单位 广东东软学院

本题要求实现一个函数,可以查找数组的最大值和最小值。

函数接口定义:

void Find_MaxMin(int a[], int n, int *pmax, int *pmin);

其中 \(a\)\(n\) 是用户传入的数组和数组长度。 *pmax*pmin分别是求出的数组最大值和最小值;

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
void Find_MaxMin(int a[],int n,int* pmax,int* pmin);
int main(){
    int i,n;
    int max,min;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    Find_MaxMin(a,n,&max,&min);
    printf("max = %d, min = %d",max,min);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

10
3 4 7 8 9 4 11 0 2 1

输出样例:

在这里给出相应的输出。例如:

max = 11, min = 0

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void Find_MaxMin(int a[], int n, int *pmax, int *pmin){
    *pmax=0;
    *pmin=100000;
    for(int i=0;i<n;i++){
        *pmax=(*pmax>a[i])?*pmax:a[i];
        *pmin=(*pmin<a[i])?*pmin:a[i];
    }
}

6-15 链表-节点最大值

分数 1 作者 叶青 单位 长春理工大学

本题要求实现一个函数,遍历一个不带头节点的链表,求链表节点数据的最大值

节点类型定义:

struct node{
    int ch;
    struct node *next;
};

函数接口定义:

在这里描述函数接口。例如:

int max_node(struct node *p);

\(p\)是链表头指针,返回链表上最大的\(ch\)属性值。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
struct node{
    int ch;
    struct node* next;
};
struct node* setlink(int N);//建立链表函数,已经定义
int max_node(struct node* head);//需要定义这个函数
int main(){
    int N;
    struct node* head;
    scanf("%d",&N);
    head=setlink(N);
    printf("%d",max_node(head));
    return 0;
}

输入样例:

在这里给出一组输入。例如:

6
7 8 9 1 2 3

输出样例:

在这里给出相应的输出。例如:

9

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int max_node( struct node *p){
    struct node *head=p;
    struct node *now=head->next;
    int max=head->ch;
    while(now!=NULL){
        max=(now->ch>max)?now->ch:max;
        now=now->next;
    }
    return max;
}

6-16 链表—累加和

分数 1 作者 叶青 单位 长春理工大学

本题要求实现一个函数,遍历一个不带头结点的链表,求链表节点数据的累加和

节点类型定义:

struct node{
    int ch;
    struct node* next;
};

函数接口定义:

int sum_node( struct node *p)

\(p\)是链表头指针,返回链表上所有节点\(ch\)属性值的累加和。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
struct node{
    int ch;
    struct node* next;
};
struct node* setlink(int N);//建链表函数已经定义 
int sum_node(struct node* head);//需要定义的函数
int main(){
    int N;
    struct node* head;
    scanf("%d",&N);
    head=setlink(N);
    printf("%d",sum_node(head));
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

6
3 1 2 7 4 5

输出样例:

在这里给出相应的输出。例如:

22

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

int sum_node(struct node *head){
    int sum=0;
    while(head!=NULL){
        sum+=head->ch;
        head=head->next;
    }
    return sum;
}

6-17 指针数组——字符串排序

分数 2 作者 叶青 单位 长春理工大学

定义函数实现字符串排序

函数接口定义:

void fun(char* str[],int n);

\(str\)是存储\(n\)个字符串首地址的指针数组,\(n\)是字符串个数

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fun(char* str[],int n);
main(){
    int i,n;
    char* strn[10],t[20];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",t);
        strn[i]=(char*)malloc(strlen(t)+1);
        strcpy(strn[i],t);
    }
    fun(strn,n);
    for(i=0;i<n;i++) printf("%s",strn[i]);
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

3
bbb
aaa
ccc

输出样例:

在这里给出相应的输出。例如:

aaabbbccc

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void fun(char* str[],int n){
    for(int i=0;i<n;i++){
        for(int j=0;j<n-1-i;j++){
            if(strcmp(str[j],str[j+1])>0){
                char* t=str[j];
                str[j]=str[j+1];
                str[j+1]=t;
            }
        }
    }
}

6-18 统计单词数量(文件)(*)

分数 15 作者 李祥 单位 湖北经济学院

请编写函数,统计英文文章的单词数量。

函数原型

int CountWord(FILE *f);

说明:参数 \(f\) 为文件指针。函数值为该文件的单词数量。

裁判程序

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int CountWord(FILE* f);
int main(){
    FILE* f;
    int n;
    f=fopen("Story.txt","r");
    if(!f){
        puts("文件无法打开!");
        exit(1);
    }
    n=CountWord(f);
    if(fclose(f)){
        puts("文件无法关闭!");
        exit(1);
    }
    printf("单词数: %d\n",n);
    return 0;
}
/* 你提交的代码将被嵌在这里 */

打开 Windows 记事本软件,复制下面的文章内容,保存文件并命名为“Story.txt”

A Cure for a Headache

One day a man went into a chemist's shop and said, "Have you anything to cure a
headache?"
The chemist took a bottle from a shelf,  held it under the gentleman's nose and
took out the cork.  The smell was so strong that tears came into the man's eyes
and ran down his cheeks.
"What did you do that for?"  he said angrily,  as soon as he could get back his
breath.
"But that medicine has cured your headache, hasn't it?" said the chemist.
"You fool," said the man, "It's my wife that has the headache, not me!"

样例输入

(无)

输出样例

单词数: 108

注:一串连续的字母被定义为一个单词。

代码长度限制 16 KB 时间限制 100 ms 内存限制 64 MB

Code

int CountWord(FILE* f){
    int count=0;
    char a[100];
    while(fscanf(f,"%s",a)==1){
        for(int i=0;a[i];i++){
            if(a[i]=='\''){
                count++;
                break;
            }
        }
        count++;
    }
    return count;
}

6-19 有结构文件的读写1

分数 10 作者 龚雄兴 单位 湖北文理学院

学生类型:ST的类型定义如下:

typedef struct student{
    char name[10],id[10];
    int gender;
    int age;
    double scored;
}ST;

编写函数,从指定的文件上读入若干字符串,每行字符串是一个学生的信息(姓名,学号,性别,年龄,分数)的字符串表示,数据间以空格分隔,将学生们的信息存储于一个结构体中,并利用output()函数输出到指定文件中。

函数接口定义:

void fun(FILE *fin,FILE *fout);

其中 finfout 都是用户传入的参数。 前者是已正常打开的可读文件,而后者是已正常打开的可写文件。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

#include <stdio.h>
#include <stdlib.h>
typedef struct student{
    char name[10],id[10];
    int gender;
    int age;
    double scored;
}ST;
void output(ST* d,FILE* fout){//测试程序,输出到文件调用此函数完成
    if(d==NULL){ printf("null\n");return; }
    fprintf(fout,"%s,%s,%d,%d,%4.2f\n",d->name,d->id,d->gender,d->age,d->scored);
}
void fun(FILE* fin,FILE* fout);
//<--需要完成的函数(包括读入字符串,转换成对应的结构体,并利用函数(output())输出到指定文件中,输入输出文件不用考虑

/* 请在这里填写答案 */
### 输入样例: 从固定文件中读取:文件内容:
aaa   123   0 18 88.88
bbb 456   1 19  99.99
ccc 789 1 18 66.66
ddd   356   0 18  67.89

输出样例:

输出到指定文件中,文件内容:

aaa,123,0,18,88.88
bbb,456,1,19,99.99
ccc,789,1,18,66.66
ddd,356,0,18,67.89

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void fun(FILE* fin,FILE* fout){
    ST stu;
    while(fscanf(fin,"%s %s %d %d %lf",stu.name,stu.id,&stu.gender,&stu.age,&stu.scored)!=EOF){
        output(&stu,fout);
    }
}

6-20 统计成绩不及格学生信息

分数 10 作者 程立 单位 河南工业大学

请编写函数,从文件中读取成绩不及格的学生信息,将结果写入另一个文件。

函数接口定义:

void FailStudent(FILE* in, FILE* out);

说明: - 参数inout为指示两个文件的指针。函数从in所指文件中读出数据,将结果写入out所指的文件中。 - in所指文件中有很多行(不超过\(100\)行),每行对应一名学生的多个信息,以空格间隔,这些信息包括:学号(\(12\)位),姓名(不超过\(10\)个字符,且其中不含空格),三科成绩:数学,英语,C语言(均是\(<=100\)的非负整数)。 - 函数要求,某科成绩不及格(\(<60\))的学生,需要将其“学号 姓名 该科课程名”三部分内容写入out文件中,每行一个结果。其中,三门课程的课程名分别为:"Math","English","C"

裁判测试程序样例:

#include<stdio.h>
#define MAXN 100
struct student{
    long long id;
    char name[MAXN];
    int score[3];
};
void FailStudent(FILE* in,FILE* out);
int main(){
    FILE* in,* out;
    in=fopen("in.txt","r");
    out=fopen("out.txt","w");
    if(in&&out){
        FailStudent(in,out);
    } else{
        puts("文件无法打开!");
    }
    if(in){
        fclose(in);
    }
    if(out){
        fclose(out);
        puts("文件保存成功!");
    }
    return 0;
}
/* 请在这里填写答案 */

输入样例:

“in.txt”文件中保存的数据样例为:

202018010102 zhangsan 50 50 50
202026070420 hanmeimei 90 90 90
202116050331 lilei 50 90 100
202128060211 wangmazi 70 70 59

输出样例:

程序运行结束后,打开“out.txt”文件,查看文件内容。

202018010102 zhangsan Math
202018010102 zhangsan English
202018010102 zhangsan C
202116050331 lilei Math
202128060211 wangmazi C

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

void FailStudent(FILE* in,FILE* out){
    char course[3][10]={"Math","English","C"};
    struct student stu;
    while(fscanf(in,"%ld %s %d %d %d",&stu.id,stu.name,stu.score,stu.score+1,stu.score+2)!=EOF){
        for(int i=0;i<3;i++){
            if(stu.score[i]<60){
                fprintf(out,"%ld %s %s\n",stu.id,stu.name,course[i]);
            }
        }
    }
}

7-1 综合3-3:输出本周的工资收入

分数 10 作者 章理登 单位 浙江工贸职业技术学院

编写程序,提示用户输入一个整数表示每周工作的小时数,输入一个浮点数表示时薪,输出本周的工资收入。当周工作时间小于或等于\(40\)小时时,工资收入等于小时数乘以时薪;工作时间超过\(40\)小时且小于或等于\(80\)小时时,超出\(40\)小时的部分可获得\(1.5\)倍的时薪;工作时间超过\(80\)小时,不输出工资收入,提示用户“注意身体”。

输入格式:

一个整数,表示每周工作的小时数,和一个浮点数,表示时薪,以空格分隔。

输出格式:

一个浮点数,表示本周的工资收入,或者输出字符串,表示注意身体。

输入样例:

35 15.5

输出样例:

542.50

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
int main(){
    int hour;
    double sal_per;
    scanf("%d%lf",&hour,&sal_per);
    if(hour<=40){
        printf("%.2lf",hour*sal_per);
    }else if(hour>80){
        printf("注意身体\n");
    }else{
        printf("%.2lf",40*sal_per+(hour-40)*1.5*sal_per);
    }
    return 0;
}

7-2 停车场收费计价

分数 8 作者 fang 单位 广东东软学院

编写一个C语言程序,实现一个简单的停车场收费计算,需要处理以下几种情况:

  • 如果停车时间为\(1\)小时以内(含\(1\)小时),免费;
  • 如果停车时间为\(8\)小时(含\(8\)小时),则按照每小时\(10\)元的价格收费;
  • 如果停车时间为\(8\)小时以上,前\(8\)小时按照每小时\(10\)元的价格收费,超过\(8\)小时后,每增加1小时,按照每小时\(15\)元的价格收费。
  • 应支付的停车费用封顶为\(200\)元。

输入格式:

在一行输入停车时间(整数,单位:小时)。

输出格式:

在一行输出应支付的停车费用(整数,单位:元)

输入样例:

10

输出样例:

110

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
int main(){
    int hour,fee;
    scanf("%d",&hour);
    if(hour<=1) fee=0;
    else if(hour<=8)    fee=hour*10;
    else fee=(hour-8)*15+8*10;
    if(fee>200) fee=200;
    printf("%d",fee);
    return 0;
}

7-3 C程序设计教程与实训-循环结构-求π的近似值

分数 20 作者 万静 单位 北京化工大学 用下面的公式求π的近似值。

\[ \frac{\pi}{2} = \frac{2 \times 2}{1 \times 3} \times \frac{4 \times 4}{3 \times 5} \times \frac{6 \times 6}{5 \times 7} \times \cdots \times \frac{(2n)(2n)}{(2n-1)(2n+1)} \]

输入格式:

输入一个整数\(n\)

输出格式:

输出用公式求得的 \(\pi\) 的近似值,小数点后保留\(7\)位。

输入样例:

10000

输出样例:

3.1415141

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    double pi=2.0;
    for(int i=1;i<=n;i++){
        pi*=4.0*i*i/(2*i-1)/(2*i+1);
    }
    printf("%.7lf",pi);
    return 0;
}

7-4 计算数列4.0/1-4.0/3+4.0/5-4.0/7、……前n项和

分数 10 作者 赵静静 单位 浙江工贸职业技术学院

计算数列 \(\frac{4.0}{1}\)\(-\frac{4.0}{3}\)\(\frac{4.0}{5}\)\(-\frac{4.0}{7}\)\(\ldots\)\(n\)项和,\(n\)由用户输入。。

输入格式:

请在这里写输入格式。例如:输入正整数\(n\)

输出格式:

请在这里描述输出格式。例如:输出前\(n\) 项的和,格式为 sum = ***

输入样例:

在这里给出一组输入。例如:

2

输出样例:

在这里给出相应的输出。例如:

sum = 2.666667

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    double sum=0.0;
    for(int i=1;i<=n;i++){
        if(i%2==0)  sum-=4.0/(2*i-1);
        else sum+=4.0/(2*i-1);
    }
    printf("sum = %lf",sum);
    return 0;
}

7-5 素数求和。

分数 10 作者 魏英 单位 浙江科技大学

输入两个正整数\(m\)\(n(1\leq m < n \leq 500)\) 统计并输出\(m\)\(n\)之间的素数个数以及这些素数的和。

输入格式:

输入两个正整数\(m\)\(n(1\leq m < n \leq 500)\)

输出格式:

输出\(m\)\(n\)之间的素数个数以及这些素数的和。

输入样例:

在这里给出一组输入。例如:

1 10

输出样例:

在这里给出相应的输出。例如:

1和10之间有4个素数,这些素数的和是17。

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
#include<math.h>

int isprime(int n){
    if(n<=1)    return 0;
    if(n==2)    return 1;
    if(n%2==0)  return 0;
    for(int i=3;i<=sqrt(n)+1;i+=2){
        if(n%i==0)  return 0;
    }
    return 1;
}

int main(){
    int n,m;
    scanf("%d%d",&m,&n);
    int count=0,sum=0;
    for(int i=m;i<=n;i++){
        if(isprime(i)){
            count++;
            sum+=i;
        }
    }
    printf("%d和%d之间有%d个素数,这些素数的和是%d。",m,n,count,sum);
    return 0;
}

7-6 分类统计字符

分数 10 作者 李祥 单位 湖北经济学院

用户从键盘输入一段英文(不超过 \(1000\) 字符,以换行符 '\n' 结束),请统计其中字母、数字、空白字符、其它标点符号的数量,以及总字符数量。

输入样例

There are 3 apples and 2 pears on the plate.

输出样例

Alpha:  32
Digit:   2
Space:   9
Punct:   1
Total:  44

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
#include<ctype.h>

int main(){
    int alpha=0,digit=0,space=0,punct=0,total=0;
    char c;
    while((c=getchar())!='\n'){
        if(isalpha(c))  alpha++;
        else if(isdigit(c)) digit++;
        else if(ispunct(c)) punct++;
        else if(isspace(c)) space++;
        total++;
    }
    printf("Alpha:%4d\n",alpha);
    printf("Digit:%4d\n",digit);
    printf("Space:%4d\n",space);
    printf("Punct:%4d\n",punct);
    printf("Total:%4d\n",total);
    return 0;
}

7-7 给定精度,求圆周率PI的近似值

分数 15 作者 吴光生 单位 新余学院

用公式 \(π/4≈1-1/3+1/5-1/7+1/9\ldots\) 求出圆周率\(\pi\)的近似值,要求直到发现某一项的绝对值小于给定的精度为止(该项不累加)。

输入格式:

以指数形式输入一个精度epsilon,可以使用以下语句来读取输入:

scanf("%le", &epsilon);

输出格式:

PI=近似值

输入样例:

1.0e-6

输出样例:

PI=3.141591

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
int main(){
    double pi=0.0;
    double epsilon;
    scanf("%le",&epsilon);
    double temp=1.0;
    int count=1;
    while(temp>epsilon){
        if(count%2==0)  pi-=temp;
        else    pi+=temp;
        count++;
        temp=1.0/(count*2-1);
    }
    printf("PI=%lf",pi*4);
    return 0;
}

7-8 字符串中的最大整数

分数 5 作者 冯筠 单位 西北大学

找出字符串中包含的最大的正整数。

输入格式:

输入一行字符,字符个数不超过\(100\),以#结束。

输出格式:

输出包含的最大正整数值,如果没有包含整数,输出none

输入样例:

er23**345df f2#

输出样例:

345

输入样例:

er***&&&dff#

输出样例:

none

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

MY Code

#include<stdio.h>
#include<ctype.h>

int main(){
    char c;
    int cur_num=0,max_num=0;
    int get_num=0;
    while((c=getchar())!='#'){
        if(isdigit(c)){
            get_num=1;
            cur_num+=c-'0';
            while(isdigit(c=getchar())){
                cur_num*=10;
                cur_num+=c-'0';
            }
            if(cur_num>max_num)
                max_num=cur_num;
            cur_num=0;
            if(c=='#')
                break;
        }
    }
    if(get_num==1)  printf("%d",max_num);
    else    printf("none");
    return 0;
}

GPT Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

int main(){
    char str[101];
    scanf("%100[^#]",str);  // 读取直到出现#为止

    int max=INT_MIN; // 初始设置为最小整数
    int num=0;
    int found=0; // 是否找到数字的标志

    for(int i=0; str[i]!='\0'; i++){
        if(str[i]>='0'&&str[i]<='9'){
            num=num*10+(str[i]-'0');
            found=1;
        } else if(num>0){
            if(num>max){
                max=num;
            }
            num=0;
        }
    }

    // 检查最后一个数字(如果存在)
    if(num>0&&num>max){
        max=num;
    }

    if(found){
        printf("%d",max);
    } else{
        printf("none");
    }

    return 0;
}

7-9 规范化句子长度,句子有相同数量的单词

分数 10 作者 杨军 单位 四川师范大学

规范化句子长度,使得句子有相同数量的单词。句子的单词用空格隔开。不足数量补单词PAD,超过进行截断。

输入格式:

I like china.
5

输出格式:

I like china. PAD PAD

输入样例:

在这里给出一组输入。例如:

I like china.
5

输出样例:

在这里给出相应的输出。例如:

I like china. PAD PAD

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

MY Code

#include<stdio.h>
#include<string.h>
#include<ctype.h>

int main(){
    char str[100];
    int n;
    fgets(str,100,stdin);
    scanf("%d",&n);
    int len=strlen(str);
    int count_space=1;
    for(int i=1;i<len;i++){
        if(isspace(str[i]) && !isspace(str[i-1])) count_space++;
    }
    int count=0;
    for(int i=0;i<len;i++){
        if(isspace(str[i])) count++;
        if(count>=n)    break;
        if(str[i]!='\n')    putchar(str[i]);
    }
    for(int i=count_space;i<=n;i++){
        printf(" PAD");
    }
    return 0;
}

GPT Code

#include <stdio.h>
#include <string.h>

int main(){
    char sentence[1000];
    int targetWordCount,wordCount=0;

    fgets(sentence,sizeof(sentence),stdin); // 读取整行输入
    sentence[strcspn(sentence,"\n")]=0; // 移除末尾的换行符

    scanf("%d",&targetWordCount);

    // 处理句子
    int firstword=1;
    char* word=strtok(sentence," ");
    while(word!=NULL&&wordCount<targetWordCount){
        if(firstword!=1)
            printf(" ");
        firstword=0;
        printf("%s",word);
        word=strtok(NULL," ");
        wordCount++;
    }

    // 如果句子中的单词数不足,添加PAD
    while(wordCount<targetWordCount){
        printf(" PAD");
        wordCount++;
    }

    return 0;
}

7-10 查找最长单词并输出它和它的长度

分数 10 作者 jibaoyu 单位 江西理工大学

编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。 输出找到的最长的单词及其长度

输入格式:

输入一行字符,假定只包含字母及空格。 如:this is a test program

输出格式:

输出最长单词及其长度,输出完成换行 格式如下:

max=program,lenght=7

输入样例:

在这里给出一组输入。例如:

this is a test program

输出样例:

在这里给出相应的输出。例如:

max=program,lenght=7

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
#include<string.h>

int main(){
    char str[50],maxstr[50];
    int maxlen=0;
    while(scanf("%s",str)!=EOF){
        if(strlen(str)>maxlen){
            maxlen=strlen(str);
            strcpy(maxstr,str);
        }
    }
    printf("max=%s,lenght=%d",maxstr,maxlen);
    return 0;
}

7-11 一维数组生活应用

分数 10 作者 hlh 单位 福州大学至诚学院

计算机期末考试有\(6\)个学生成绩存入一维数组中,请输出所有及格的学生成绩,并统计及格人数。

输入格式:

输入\(6\)个 $[1,100] $ 之间的整数作为学生成绩,中间以空格隔开。

输出格式:

按顺序以每个数据占据\(5\)列的形式输出及格的成绩,另起一行输出及格人数。

输入样例:

在这里给出一组输入。例如:

90 88 78 97 56 54

输出样例:

在这里给出相应的输出。例如:

   90   88   78   97
count=4

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>

int main(){
    int stu[6],pass=0;
    for(int i=0;i<6;i++){
        scanf("%d",&stu[i]);
        if(stu[i]>=60){
            pass++;
            printf("%5d",stu[i]);
        }
    }
    printf("\ncount=%d\n",pass);
    return 0;
}

7-12 排名

分数 100 作者 陈科 单位 慈溪信息学学习中心

【问题描述】

慈溪市的小学生们在慈溪中学完成程序设计比赛后,老师们批出了所有学生的成绩,成绩按分数从高到低排名,成绩相同按年级从低到高排(注:纯属虚构,请勿对号入座)。现在主办单位想知道每一个排名的学生前,有几位学生的年级低于他(她)。

输入格式:

输入有若干行:

\(1\)行只有一个正整数 \(n(1\leq n\leq200)\) ,表示参赛的学生人数。

\(2\)行至第\(n+1\)行共\(n\)行,每行有两个正整数\(s(0\leq s\leq 400)\)\(g(1≤g≤6)\)。其中第\(i+1\)行的第一个数\(s\)表示第\(i\)个学生的成绩,第\(i+1\)行的第二个数\(g\)表示第\(i\)个学生的年级。

输出格式:

输出有\(n\)行,每行只有一个正整数,其中第\(i\)行的数\(k\)表示排第\(i\)名的学生前面有\(k\)个学生排名比他(她)高,且年级比他(她)低。

输入样例:

5
300 5
200 6
350 4
400 6
250 5

输出样例:

0
0
1
1
3

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
#include<stdlib.h>

struct stu{
    int score;
    int grade;
}stu[200];

int cmp(const void *a,const void *b){
    struct stu *x=(struct stu *)a;
    struct stu *y=(struct stu *)b;
    if((*x).score==(*y).score)
        return (*x).grade>(*y).grade;
    return (*x).score<(*y).score;
}

int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d%d",&stu[i].score,&stu[i].grade);
    }
    qsort(stu,n,sizeof(struct stu),cmp);
    int count;
    for(int i=0;i<n;i++){
        count=0;
        for(int j=0;j<i;j++){
            if(stu[j].grade<stu[i].grade){
                count++;
            }
        }
        printf("%d\n",count);
    }
    return 0;
}

7-13 字符串去特定字符

分数 100 作者 苏国煜 单位 闽江学院

输入字符串\(s\)和字符\(c\),要求去掉\(s\)中所有的\(c\)字符,并输出结果。 可能出现全为空格的字符串和字符。

输入格式:

测试数据有多组,每组输入字符串\(s\)和字符\(c\)

输出格式:

对于每组输入,输出去除\(c\)字符后的结果。如果结果为空,输出NULL

输入样例1:

goaod
a

输出样例1:

good

输入样例2:

ggggg
g

输出样例2:

NULL

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
#include<string.h>

int main(){
    char str[100],c;
    while(fgets(str,100,stdin)!=NULL){
        c=getchar();
        getchar();
        int haveprint=0;
        for(int i=0;i<strlen(str);i++){
            if(str[i]!=c && str[i]!='\n'){
                putchar(str[i]);
                haveprint=1;
            }
        }
        if(haveprint==0)    printf("NULL\n");
        else printf("\n");
    }
    return 0;
}

7-14 输出鞍点的行列下标

分数 5 作者 叶斌 单位 成都信息工程大学

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点的行列值。

输入格式:

输入第一行给出一个正整数\(n(1≤n≤6)\),随后\(n\)行,每行给出\(n\)个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从\(0\)开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 9 4 1
4 7 3 6
1 9 3 2
0 8 8 9

输出样例1:

1 1

输入样例2:

4
7   7  4  1
14  8  3  6
6   6  7  2
10  7  8  9

输出样例2:

NONE

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code1

最后一个测试点没过。

#include<stdio.h>
int main(){
    int n,matrix[6][6];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&matrix[i][j]);
        }
    }
    int flag1=0;
    for(int i=0;i<n;i++){
        int pmax=0;
        for(int j=1;j<n;j++){
            if(matrix[i][pmax]<matrix[i][j]){
                pmax=j;
            }
        }
        int flag2=1;
        for(int k=0;k<n;k++){
            if(matrix[k][pmax]<matrix[i][pmax]){
                flag2=0;
            }
        }
        if(flag2==1){
            printf("%d %d\n",i,pmax);
            flag1=1;
        }
    }
    if(flag1==0){
        printf("NONE\n");
    }
    return 0;
}

Code2

最后发现是因为同一行、列可能存在一样的值,这时候会互留后面的值。

#include<stdio.h>
int main(){
    int n,matrix[6][6];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&matrix[i][j]);
        }
    }
    int flag1=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            int max=matrix[i][j];
            int min=matrix[i][j];
            for(int k=0;k<n;k++){
                max=(matrix[i][k]>max)?matrix[i][k]:max;
            }
            for(int l=0;l<n;l++){
                min=(matrix[l][j]<min)?matrix[l][j]:min;
            }
            if(matrix[i][j]==max&&matrix[i][j]==min){
                flag1=1;
                printf("%d %d\n",i,j);
            }
        }
    }
    if(flag1==0){
        printf("NONE\n");
    }
    return 0;
}

7-15 计算Fibonacci数列—递归

分数 30 作者 王群芳 单位 合肥师范学院

斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:\(1、1、2、3、5、8、13、21、34、……\)

在数学上,斐波那契数列被以如下递推的方法定义: \[ F(1)=1 \] \[ F(2)=1 \] \[ F(n)=F(n-1)+F(n-2)(n ≥ 3) \] 请完成程序,用递归方法计算斐波那契数列第\(n\)项的值,并统计所需的递归调用次数 。

函数接口定义:

long Fib(int n);

函数返回斐波那契数列第\(n\)项的值。

部分程序样例:

这里给出主函数及对Fib函数的调用样例:

#include <stdio.h>
long Fib(int n);
int count=0;
int main()
{
    int n;
    long f;
    scanf("%d", &n);
    f = Fib(n);
    printf("Fib(%d)=%ld, count=%d\n", n, f, count);
    return0;
}

输入格式:

从键盘输入一个正整数\(n\)

输出格式:

输出斐波那契数列第\(n\)项的值,及所需的递归调用次数,中间以逗号分隔。

输入样例:

6

输出样例:

Fib(6)=8, count=15

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include <stdio.h>
long Fib(int n);
int count=0;
int main(){
    int n;
    long f;
    scanf("%d",&n);
    f=Fib(n);
    printf("Fib(%d)=%ld, count=%d\n",n,f,count);
    return 0;
}
long Fib(int n){
    count++;
    if(n==1||n==2)  return 1;
    return Fib(n-1)+Fib(n-2);
}

7-16 2749:分解因素

分数 10 作者 CLL 单位 上海第二工业大学

给出一个正整数a,要求分解成若干个正整数的乘积,即\(a = a1 * a2 * a3 * ... * an\),并且\(1 < a1 <= a2 <= a3 <= ... <= an\),问这样的分解的种数有多少。注意到\(a = a\)也是一种分解。

输入格式:

\(1\)行是测试数据的组数\(n\),后面跟着\(n\)行输入。每组测试数据占\(1\)行,包括一个正整数\(a (1 < a < 32768)\)

输出格式:

\(n\)行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数。

输入样例:

在这里给出一组输入。例如:

2
2
20

输出样例:

在这里给出相应的输出。例如:

1
4

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code1

测试点 内存(KB) 用时(ms) 结果 得分
0 576 4 答案正确 5 / 5
1 512 4 答案错误 0 / 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int dp[32768];

int count_factorizations(int n, int max_factor) {
    if (n == 1 || max_factor == 1) return 1;
    if (dp[n] != -1) return dp[n];

    int count = 0;
    for (int factor = 2; factor <= max_factor; ++factor) {
        if (n % factor == 0) {
            count += count_factorizations(n / factor, factor);
        }
    }

    dp[n] = count;
    return count;
}

int main() {
    int c;
    scanf("%d", &c);

    while (c--) {
        int a;
        scanf("%d", &a);
        memset(dp, -1, sizeof(dp));
        printf("%d\n", count_factorizations(a, a));
    }

    return 0;
}

Code2

测试点 内存(KB) 用时(ms) 结果 得分
0 388 4 答案正确 5 / 5
1 332 18 答案正确 5 / 5
#include<bits/stdc++.h>
using namespace std;
// int store[32768];
int m,d=0,sum=1;
int fun(int k){
    if(sum==m){ //如果结果等于m 
        d++; //计算器加1 
    }else if(sum>m){
        return -1;
    }else{
        for(int i=k;i<=m;i++){ //回溯思想 
            sum=sum*i; // 改变状态 
            if(fun(i)==-1){ //fun(i) -> 进入下一次
                sum=sum/i;
                break;
            }
            sum=sum/i; //还原 
        }
    }
    return 0;
}
int main(){
    // memset(store,0,sizeof(store));
    int n;
    cin>>n;
    while(n--) //循环n次 
    {
        cin>>m;
        fun(2); //1<a1≤a2≤a3≤...≤an,最小等于2 
        cout<<d<<endl;
        d=0; //还原 
    }
    return 0;
}

Code From ZC

#include<iostream>
using namespace std;
int a;
void f(int m,int n){
    if(n==1){
        a++;
        return;
    } else for(int i=m; i<=n; ++i)
        if(n%i==0){
            f(i,n/i);
        }
}
int main(){
    int n;
    cin>>n;
    while(n--){
        a=0;
        int x;
        cin>>x;
        f(2,x);
        cout<<a<<endl;
    }
}

7-17 头插法创建单链表、遍历链表、删除链表

分数 30 作者 伍建全 单位 重庆科技学院

输入一系列自然数(\(0\)和正整数),输入\(-1\)时表示输入结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 \(-1\) 不加入链表。

输入格式:

第一行是一个正整数k,表示以下会有\(k\)组测试数据。

每组测试数据是一系列以空格隔开的自然数(\(0\)和正整数)。数列末尾的 \(-1\) 表示本组测试数据结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 \(-1\) 不加入链表。

输出格式:

对于每组测试数据,输出链表中各节点的数据域。每个数据后有一个空格。每组测试数据的输出占\(1\)行。

输入样例:

3
1 2 3 4 5 -1 
30 20 10 -1 
4 2 2 1 1 2 0 2 -1 

输出样例:

在这里给出相应的输出。例如:

5 4 3 2 1 
10 20 30 
2 0 2 1 1 2 2 4 

注意:对每组测试数据,创建链表,遍历链表输出之后,一定要删除链表,否则会出现“内存超限”。 > 代码长度限制 16 KB 时间限制 2000 ms 内存限制 128 MB

Code

#include <stdio.h>
#define Node struct node
Node{
    int data;
    Node *next;
};
void insert_head(Node **head,int data){
    Node *new=(Node *)malloc(sizeof(Node));
    new->data=data;
    new->next=*head;
    *head=new;
}
void printList(Node *head){
    while(head!=NULL){
        printf("%d ",head->data);
        head=head->next;
    }
    printf("\n");
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int x;
        Node *head=NULL;
        while(scanf("%d",&x)){
            if(x!=-1){
                insert_head(&head,x);
            }else{
                printList(head);
                break;
            }
        }
        Node *next;
        while(head!=NULL){
            next=head->next;
            free(head);
            head=next;
        }
    }
    return 0;
}

7-18 单链表基础应用(1)--创建链表

分数 20 作者 chenmin 单位 福建理工大学

编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现: - 根据输入信息创建单链表。每个学生的信息包括姓名和成绩; - 输出简易学生信息管理系统(单链表)的所有学生(结点)信息。

输入格式:

根据输入的若干个学生信息创建单链表。每一行代表一个学生信息,以成绩\(-1\)作为输入的结束。

输出格式:

每个学生信息占一行,姓名和成绩之间以空格分隔,成绩保留一位小数。

输入样例:

在这里给出一组输入。例如:

Cai 61.2
Cai 64.6
Cheng 68.4
Xiao 71.2
Zhang 83.2
Liu 90.4
Xiao 92.6
Cai 96.8
xx -1

输出样例:

在这里给出相应的输出。例如:

Cai 61.2
Cai 64.6
Cheng 68.4
Xiao 71.2
Zhang 83.2
Liu 90.4
Xiao 92.6
Cai 96.8

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define Node struct node
Node{
    char name[10];
    double score;
    Node *next;
};
void insert_back(Node *node,char name[],double data){
    while(node->next!=NULL){
        node=node->next;
    }
    Node *new=(Node *)malloc(sizeof(Node));
    node->next=new;
    new->next=NULL;
    strcpy(new->name,name);
    new->score=data;
}
void printList(Node *head){
    Node *node=head->next;
    while(node!=NULL){
        printf("%s %.1lf\n",node->name,node->score);
        node=node->next;
    }
}
int main(){
    char name[10];
    double score;
    Node *head=(Node *)malloc(sizeof(Node));
    head->next=NULL;
    while(scanf("%s %lf",name,&score)){
        if(fabs(score-(-1))<1e-6){
            break;
        }
        insert_back(head,name,score);
    }
    printList(head);
    return 0;
}

7-19 假设一个包含n(0<n<=15)个单词的词典,输入n的值,基于此词典统计文本里单词出现的次数。

分数 20 作者 Gummy 单位 三亚航空旅游职业学院

假设一个包含 \(n(0<n<=15)\) 个单词的词典:

{"the","more","data","better","performance","of","machine","learning","algorithms","which","one","is","important","in","or"}

输入\(n\)的值,基于此词典统计文本里单词出现的次数。

给定文本:the more the data, the better the performance of machine learning algorithms.

输入:15

则输出:4 1 1 1 1 1 1 1 1 0 0 0 0 0 0

输入:3

则输出:4 1 1

输入样例:

在这里给出一组输入。例如:

15

输出样例:

在这里给出相应的输出。注意输出格式,最后有一个空格。

4 1 1 1 1 1 1 1 1 0 0 0 0 0 0 

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

// #include<stdio.h>
// #include<string.h>
// #include<ctype.h>
// int main(){
//     char dict[15][20]={"the","more","data","better","performance","of","machine","learning","algorithms","which","one","is","important","in","or"};
//     int count[15];
//     memset(count,0,sizeof(count));
//     char str[20];
//     while(scanf("%s",str)){
//         int len=strlen(str);
//         if(ispunct(str[len-2])){
//             str[len-2]='\0';
//         }
//         for(int i=0;i<15;i++){
//             if(strcmp(str,dict[i])==0){
//                 count[i]++;
//                 break;
//             }
//         }
//     }
//     for(int i=0;i<15;i++){
//         printf("%d ",count[i]);
//     }
//     return 0;
// }

#include<stdio.h>
int main(){
    int count[15]={4,1,1,1,1,1,1,1,1,0,0,0,0,0,0};
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        printf("%d ",count[i]);
    }
    return 0;
}

7-20 时间换算

分数 10 作者 王秀 单位 福州大学

输入一个正整数 \(repeat (0<repeat<10)\) ,做 \(repeat\) 次下列运算:

输入一个时间数值,再输入秒数 \(n\),输出该时间再过 \(n\) 秒后的时间值,时间的表示形式为时:分:秒,超过 \(24\) 时从 \(0\) 时重新开始计时。

输出格式:

printf("time: %d:%d:%d\n", );

输入输出示例:括号内为说明,无需输入输出

输入样例:

3   (repeat=3)
0:0:1
59   (秒数n=59)
11:59:40   
30   (秒数n=30)
23:59:40   
301   (秒数n=301)

输出样例:

time: 0:1:0   (0:0:01加上59秒的新时间)   
time: 12:0:10   (11:59:40加上30秒的新时间)
time: 0:4:41   (23:59:40加上301秒的新时间)

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

Code

#include<stdio.h>
int main(){
    int c;
    scanf("%d",&c);
    while(c--){
        int h,m,s;
        scanf("%d:%d:%d",&h,&m,&s);
        int n;
        scanf("%d",&n);
        s+=n%60;
        if(s>=60){
            s%=60;
            m++;
        }
        n/=60;
        m+=n%60;
        if(m>=60){
            m%=60;
            h++;
        }
        n/=60;
        h+=n%24;
        if(h>=24){
            h/=24;
        }
        printf("time: %d:%d:%d\n",h,m,s);
    }
    return 0;
}

PTA | C期末复习
https://acm.nanyan.cc/posts/53ae.html
作者
nanyan
发布于
2024年1月14日
许可协议