C语言程序设计精髓第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>

int CountRepeatNum(int a[], int j);     /*does it has duplicate figures*/

int main()
{
    int a[20], number, result;
    int i = 0, j;
    printf("Input n:\n");
    scanf("%d", &number);
    do                                      /*save the number in the a[] one by one*/
    {
        if ((number/10) == 0)
        {
            a[i] = number;
            break;
        }
        a[i] = number % 10;
        i++;
        j = i;
        number /= 10;
    }while(1);
    result = CountRepeatNum(a, j);           /*if has duplicate figures, return the figures*/
    if (result == -1)                        /*if not, return -1*/
        printf("No repeated digit!\n");
    else
        printf("Repeated digit!\n");
    return 0;
}

int CountRepeatNum(int a[], int j)
{
    int i, flag =0;
    for (; j > 0; j--)
    {
        for (i = j-1; i >= 0; i--)
        {
            if (a[j] == a[i])
                flag = 1;
        }
    }
    if (flag == 1)
        return a[j];
    else
        return -1;
}

2

教授的课(4分)

题目内容:

教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。

已知函数原型:

 

//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0

int 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>

int IsCancel(int a[], int n, int k);

int main()
{
    int n, k;
    int i, a[1000];
    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;
}

int IsCancel(int a[], int n, int k)
{
    int count = 0, i;
    for (i = 0; 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
#include <stdio.h>
#define N 20
#define M 20

void FindSaddlePoint(int a[][N], int m, int n);

int main()
{
    int m, n, a[M][N];
    int i, j;
    printf("Input m,n:\n");
    /*save data in a[][]*/
    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]);
        }
    }
    /*output*/
    FindSaddlePoint(a, m, n);
    return 0;
}

void FindSaddlePoint(int a[][N], int m, int n)
{
    int b[N];
    int i, j;
    int Min_n;
    int flag = 0, count = 0;
    for (i = 0; i <m; i++)
    {
        for (j = 1; j < n; j++)
        {
            Min_n = 0;
            if (a[i][0] < a[i][j])
                Min_n = j;
            b[i] = Min_n;
        }
    }

    for (i = 0; i < m; i++)
    {
        /*the max figure in this line is a[i][b[i]]*/
        for (j = 0; j < m; j++)
        {
            if (a[i][b[i]] > a[j][b[i]])
                flag = 1;
        }
        if (flag == 0)
        {
            printf("a[%d][%d] is %d\n", i, b[i], a[i][b[i]]);
            count++;
        }
    }
    if (count == 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 Factorial(long n);
int main()
{
	long a, b, c;
	long m;
	for(m=100;m<1000;m++)
	{
		a = m / 100;
		b = m / 10 % 10;
		c = m % 10;
		if(Factorial(a) + Factorial(b) + Factorial(c) == m)
		{
			printf("%ld\n", m);
		}
	}
	return 0;
}

long Factorial(long n)
{
    long initial = 1;
    int i;
    for (i = 2; i <= n; i++)
    {
        initial *= i;
    }
    return initial;
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比巧克力巧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值