CEIT 23练习编程题 题解

发布时间 2023-10-16 20:07:41作者: Cheng_Mao

本文部分题目提供c/c++两种解法,顺便可以让你们知道c++在面对某些题时的优势
部分题目提供多种解法

日期格式化

image

C

#include <stdio.h>
int main(){
    int m,d,y;
    scanf("%d-%d-%d",&m,&d,&y);
    printf("%04d-%02d-%02d",y,m,d);
    return 0;
}

02d的含义:当有效数字不足2位时,前面使用0将其补成2位
比如输入了6月,直接输出会输出2003-6-11,但是我们需要的是2023-06-11,

求成绩最大值

image

C

1.全部录入后处理

#include <stdio.h>
int main(){
    int score[7]; //储存成绩
    int max_idx; //最大成绩下标
    int max_score = 0; //最大成绩
    for(int i=0;i<7;i++)scanf("%d",score+i);
    for(int i=0;i<7;i++){
        if(score[i]>max_score){
            max_idx = i;
            max_score = score[i];
        }
    }
    printf("选手最高得分:%d",score[max_idx]);
	return 0;
}

2.实时维护最大值

#include <stdio.h>
int main(){
    int max_score=0,tmp;
    for(int i=0;i<7;i++){
        scanf("%d",&tmp);
        if(tmp>max_score)max_score = tmp;
    }
    printf("选手最高得分:%d",max_score);
	return 0;
}

C++

全部录入处理

#include "iostream"
#include "algorithm"
using namespace std;
int main(){
    int s[7];
    for(int i=0;i<7;i++)cin>>s[i];
    cout<<"选手最高得分:"<<*max_element(s,s+7);
	return 0;
}

实时维护最大值

#include "iostream"
using namespace std;
int main(){
    int tmp,max_score;
    for(int i=0;i<7;i++){
        cin>>tmp;
        max_score=max(tmp,max_score);
    }
    cout<<"选手最高得分:"<<max_score;
	return 0;
}

素数

因为题目中并未说明有多少行数据,所以要使用scanf的返回值来作为循环条件
但是这种输入方式的题不会太多 了解就行,重点在如何判断素数
image

C

#include <stdio.h>
bool isPrime(int x) {
    if(x==1)return false ;
    int i = 2;
    for (; i <= x; i++)if (x % i == 0)break;
    if (i >= x)return true;
    else return false;
}

int main() {
    int l, r;
    while (scanf("%d %d", &l, &r)!=EOF) {
        bool is_first = true;
        for (int i = l; i <= r; i++) {
            if (isPrime(i)) {
                if (!is_first)printf(" ");
                is_first = false;
                printf("%d", i);
            }
        }
        printf("\n");
    }
}
return 0;