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 count[], int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(count[i]==count[j])
return count[i];
}
}
return -1;
}
int main()
{
long a,n;
int count[10],i=0,b;
printf("Input n:\n");
scanf("%ld",&a);
n=a;
while(a!=0)
{
count[i]=a%10;
a=a/10;
i++;
}
b=CountRepeatNum(count,i);
if(b==-1)
printf( "No repeated digit!\n");
else
printf("Repeated digit!\n");
return 0;
}
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"
#include<stdio.h>
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 0;
else
return 1;
}
int main()
{
int n,k,a[1000];
int i,b;
printf("Input n,k:\n");
scanf("%d,%d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
b=IsCancel(a,n,k);
if(b==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
3 寻找鞍点(4分) 题目内容:请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”已知函数原型:void FindSaddlePoint(int a[][N], int m, int n);在该函数中输出有无鞍点的信息。
#include<stdio.h>
#define N 10
void FindSaddlePoint(int a[][N], int m, int n)
{
int i,j,k,w,b=0;
for(i=0;i<m;i++)
{
k=0;
for(j=0;j<n;j++)
{
if(a[i][k]<a[i][j])
k=j;
}
for(w=0;w<m;w++)
{
if(a[i][k]<a[w][k])
b++;
}
if(b==n-1)
{
printf("a[%d][%d] is %d\n",i,k,a[i][k]);
return;
}
}
printf("No saddle point!\n");
return ;
}
int main()
{
int m,n,i,j,a[N][N];
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 计算三位阶乘和数(4分) 题目内容:试求出所有三位阶乘和数:m=a!+b!+c!(其中a为百位数字,b为十位数字,c为个位数字。约定0!=1,并输出所有的m
#include<stdio.h>
long Jie(long a)
{
if(a==0||a==1)
return 1;
else
return (a*Jie(a-1));
}
int main()
{
long i;
int a,b,c;
for(i=100;i<=999;i++)
{
a=i/100;
b=(i-100)/10;
c=i%10;
if(i==Jie(a)+Jie(b)+Jie(c))
printf("%ld\n",i);
}
return 0;
}