2020年MOOCC言語プログラム設計真髄第9週プログラミング問題テスト

27773 ワード

1繰り返し数字チェックテーマ内容:キーボードから数を入力し、その数に重複する数字があるかどうかをチェックします.この数に重複する数字がある場合は「Repeated digit!」と表示されます.そうでなければ「No repeated digit!」と表示されます.
#include 
#include 
#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:
"
); 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時から授業を始めると仮定します.ある学生の到着時間が正の整数でない場合、その学生が授業前に教室に入ることを示す.ある学生の到着時間が正の整数であれば、その学生が授業後に教室に入ることを示す.1人の生徒が時刻0に教室に入ると,授業前に教室に入ると考えられる.到着時刻の絶対値が100を超えず、生徒数Nが1000を超えないとする.学生の到着時間を入力する前に、NとKを入力するように要求します.既知の関数プロトタイプ://関数機能:配列aに記録された学生の到着時間に基づいて授業がキャンセルされたかどうかを決定し、キャンセルされた場合は1を返し、そうでなければ0 int IsCancel(int a[],int n,int k)を返す.
#include 
#include 
#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:
"
); 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鞍点のテーマの内容を探します:プログラミングして1つのM*N行列の中の鞍点を探し出して、つまりこの位置の上の要素はこの行の上の最大値で、この列の上の最小値です.マトリクスに鞍点がない場合は「No saddle point!」と出力します.既知の関数プロトタイプ:void FindSaddlePoint(int a[][N],int m,int n);この関数に鞍点の有無の情報を出力します.
#include 
#include 
#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
"
,i,j,a[i][j]); flag=1; } } } if(flag==0) printf("No saddle point!
"
); } int main() { int i,j,n,m; int a[MAX][MAX]; printf("Input m,n:
"
); scanf("%d,%d",&m,&n); printf("Input matrix:
"
); 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は100桁、bは10桁、cは1桁の数字である.0!=1を約束し、すべてのmを出力する)
#include 

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
"
,i); } return 0; }