哈尔滨工业大学-程序设计基础(C语言)-第9周编程题在线测试

10 篇文章 0 订阅

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”

int CountRepeatNum(int count[], int n);

main(void)
{
	int n, m, i = 0;
	int count[100] = {0};
	
	printf("Input n:\n");
	scanf("%ld",&n);
	
	m = CountRepeatNum(count, n);
	
	if (m == -1) printf("Repeated digit!\n");
	else printf("No repeated digit!\n");
	
}

int CountRepeatNum(int count[], int n)
{
	int i = 0;
	
	do
	{
		count[i] = n%10;
		n = n/10;
		i++;
	}while(n != 0);
	
	for (int j = 0; j<i; j++)
	{
		for (int k = j+1; k<i; k++)
		{
			if (count[j] == count[k]) return -1;
		}
	}
	
	return 0;
}

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"

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

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

			
}

int IsCancel(int a[], int n, int k)
{
	int i, m=0;
	for (i=0; i<n; i++)
	{
		if (a[i] > 0)
		{
			m++;
		}
	}
	if (n-m <= 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”

#define N 100

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

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


void FindSaddlePoint(int a[][N], int m, int n)
{
	int maxm[N], minn[N], tmp, i, j, flag = 0;
	
	for (i=0; i<m; i++)
	{
		tmp = a[i][0];
		for (j = 1; j<n; j++)
			if (tmp < a[i][j]) tmp = a[i][j];
		maxm[i] = tmp;
	}
	
	for(j=0; j<n; j++)
	{
        tmp = a[0][j];
        for (i=1; i<m; i++)
            if (tmp > a[i][j]) tmp = a[i][j];
        minn[j]=tmp;
    }
    
    for (i=0; i<m; i++)
    {
    	for (j=0; j<n; j++)
    	{
    		if (maxm[i] == minn[j])
    		{
    			flag = 1;
    			printf("a[%d][%d] is %d\n",i,j,maxm[i]);
			}
    		
		}
	}
    if(!flag)   printf("No saddle point!\n");
}

4. 计算三位阶乘和数(4分)

题目内容:

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

输入格式: 无

输出格式:“%ld\n”

int jc (int n);

main ()
{
	int a, b, c, m = 0;
	
	for (int i=100; i<=999; i++)
	{
		c = i%10;
		b = i/10%10;
		a = i/100;
		
		m = jc(c) + jc(b) + jc(a);
		
		if (m == i){
			printf("%ld\n",m);
		}
		
	}


 } 


int jc (int n) 
{
	int m = 1;
	if (n == 0) return 1;
	for (int i=n; i>0; i--)
	{
		m *= i;
	}
	return m;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值