中国学生MOOC第9周编程题在线测试

1 重复数字检查(4分) 题目内容:从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。已知函数原型:int CountRepeatNum(int count[], int n);若有重复数字,则该函数返回重复出现的数字;否则返回-1.程序运行结果示例1:Input n:28212↙Repeated digit!程序运行结果示例2:Input n:12345↙No repeated digit!输入提示:"Input n:\n"输入格式: "%ld"输出格式:有重复数字,输出信息: "Repeated digit!\n"没有重复数字,输出信息: "No repeated digit!\n"注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 时间限制:500ms内存限制:32000kb

//重复数字检查
#include<stdio.h>
//若有重复数字,则该函数返回重复出现的数字;否则返回-1]
int CountRepeatNum(int count[], int n);
#define N  100
int main()
{
long n;
int count[N] = { 0 };
int i, j = 0;
printf("Input n:\n");
scanf("%ld", &n);
do {
  count[j] = n % 10;
  n = n / 10;
  j++;
} while (n);
 i = CountRepeatNum(count, j);
if (i == -1) {
printf("No repeated digit!\n");
}
else {
printf("Repeated digit!\n");
}
return 0;
}
int CountRepeatNum(int count[], int n)
{
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (count[i] == count[j]) {
return count[i];
}
}
}
return -1;
}

2 教授的课(4分) 题目内容:教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。已知函数原型://函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0int IsCancel(int a[], int n, int k);程序运行结果示例1:Input n,k:
4,3↙-1 -3 4 2↙YES
程序运行结果示例2:Input n,k:
5,3↙-1 -2 -3 0 4↙NO
输入提示:“Input n,k:\n"输入格式: “%d,%d””%d"输入包括两行数据: 第1行是n,k的值。 第2行是学生的到达时间。输出格式: 课程被取消,输出"YES"课程不取消,输出"NO"注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 时间限制:500ms内存限制:32000kb

//教授的课
#include <stdio.h>
//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消
//取消则返回1,否则返回0
int IsCancel(int a[], int n, int k);
int main()
{
int n, k;
int a[20];
int i, j;
printf("Input n,k:\n");
scanf("%d,%d", &n, &k);;
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
 j = IsCancel(a, n, k);
if (j == 1)
printf("YES");
else
printf("NO");
return 0;
}
int IsCancel(int a[], int n, int k)
{
int i = 0, count = 0;
for (; i < n; i++) {
if (a[i] <= 0) {
   count++;
}
}
if (count < k)
return 1;
else
return 0;
}

3 寻找鞍点(4分) 题目内容:请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”已知函数原型:void FindSaddlePoint(int a[][N], int m, int n);在该函数中输出有无鞍点的信息。程序运行结果示例1:Input m,n:
3,3↙Input matrix:1 2 3↙4 5 6↙7 8 9↙a[0][2] is 3
程序运行结果示例2:Input m,n:3,4↙Input matrix:3 4 7 5↙0 1 8 2↙9 3 2 6↙No saddle point!
输入提示: “Input m,n:\n” “Input matrix:\n" 输入格式: 输入矩阵大小: "%d,%d"输入矩阵元素: "%d"输出格式:
找到鞍点的输出格式:“a[%d][%d] is %d\n”
没找到鞍点的输出格式:"No saddle point!\n"注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 时间限制:500ms内存限制:32000kb

{
    int a[N][N], m, n, i, j;
    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;}void FindSaddlePoint(int a[][N], int m, int n)
{
    int i, j, maxRow, maxj, flag, x;
    for(i=0;i<m;i++)
    {
        maxRow=a[i][0];
        maxj=0;
        for(j=1;j<n;j++)
        {
            if(maxRow<a[i][j])
            {
                maxRow=a[i][j];
                maxj=j;
            }
                
        }
        flag=0;
        for(x=0;x<m;x++)
        {
            if(maxRow>a[x][maxj])
                flag=1;
        }
        if(flag==0)
        {
            printf("a[%d][%d] is %d\n", i, maxj, maxRow);
            exit(0);
        }
    }
    printf("No saddle point!\n");
}


4 计算三位阶乘和数(4分) 题目内容:试求出所有三位阶乘和数:m=a!+b!+c!(其中a为百位数字,b为十位数字,c为个位数字。约定0!=1,并输出所有的m)
输入格式: 无输出格式:“%ld\n”
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 时间限制:500ms内存限制:32000kb

#include<stdio.h>
long Zjiecheng(long a[], int n);  //某数的阶乘值
int main()
{
 long m, t;
 int i, z;
 long a[3];
 for (i = 100; i < 1000; i++) {
  z = i;
  t = 0;
  do {
   a[t] = z % 10;
   z = z / 10;
   a[t] = Zjiecheng(a, t);
   t++;
  } while (z);
  m = a[0] + a[1] + a[2];
  if(m==i)
  printf("%ld\n", m);
 }
 return 0;
}
long Zjiecheng(long a[], int n)
{
 long i, jiecheng=1;
 for (i = 1; i <= a[n]; i++) {
  jiecheng = jiecheng * i;
 }
 return jiecheng;
}
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值