2020年MOOCC语言程序设计精髓第九周编程题测试

1重复数字检查
题目内容:
从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

int CountRepearNum(int count[], int n){
    int num[10]={0},i;
    for(i=0;i<n;i++){
        num[count[i]]++;
    }
    for(i=0;i<10;i++)
        if(num[i]>1){
            printf("Repeated digit!");
            return 0;
        }
    printf("No repeated digit!");
    return 0;
}

int main()
{
    int i=0,number;
    int count[MAX];
    printf("Input n:\n");
    scanf("%ld",&number);
    while(number/10!=0||number%10!=0){
        count[i++]=number%10;
        number/=10;
    }
    CountRepearNum(count,i);
    return 0;
}

2教授的课
题目内容:
教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。
已知函数原型:
//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0
int IsCancel(int a[], int n, int k);

#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

int IsCancel(int a[], int n, int k){
    int i,class_ontime=0;
    for(i=0;i<n;i++)
        if(a[i]<=0)
            class_ontime++;
    if(class_ontime>=k)
        return 0;
    else
        return 1;
}

int main()
{
    int i=0,n,k;
    int a[MAX];
    printf("Input n,k:\n");
    scanf("%d,%d",&n,&k);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    if(IsCancel(a,n,k))
        printf("YES");
    else
        printf("NO");
    return 0;
}

3寻找鞍点
题目内容:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”
已知函数原型:
void FindSaddlePoint(int a[][N], int m, int n);
在该函数中输出有无鞍点的信息。

#include <stdio.h>
#include <string.h>
#define MAX 100

void FindSaddlePoint(int a[][MAX], int m, int n){
    int i,j,saddle_num=0,flag;
    int temp[m][n];
    memset(temp,0,m*n*sizeof(int));
    for(i=0;i<m;i++){
        flag=0;//每行第一个先设为最大
        for(j=0;j<n;j++)
            if(a[i][j]>a[i][0])
                flag=j;
        temp[i][flag]++;
    }
    for(i=0;i<n;i++){
        flag=0;//每列第一个先设为最小
        for(j=0;j<m;j++)
            if(a[j][i]<a[0][i])
                flag=j;
        temp[flag][i]++;
    }
    flag=0;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            if(temp[i][j]==2){
                printf("a[%d][%d] is %d\n",i,j,a[i][j]);
                flag=1;
            }
        }
    }
    if(flag==0)
        printf("No saddle point!\n");
}

int main()
{
    int i,j,n,m;
    int a[MAX][MAX];
    printf("Input m,n:\n");
    scanf("%d,%d",&m,&n);
    printf("Input matrix:\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    FindSaddlePoint(a,m,n);
    return 0;
}

4计算三位阶乘和数
题目内容:
试求出所有三位阶乘和数:m=a!+b!+c!(其中a为百位数字,b为十位数字,c为个位数字。约定0!=1,并输出所有的m)

#include <stdio.h>

int Fact(int num){
    int i,number=1;
    if(num==0)
        return 1;
    for(i=1;i<=num;i++)
        number*=i;
    return number;
}

int main()
{
    int i;
    for(i=100;i<1000;i++){
        int unit=i%10;
        int decade=i/10%10;
        int hundreds=i/100;
        if(i==Fact(unit)+Fact(decade)+Fact(hundreds))
            printf("%ld\n",i);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值