1重复数字检查
题目内容:
从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。
#include <stdio.h>
#include <stdlib.h>
#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:\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开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。
已知函数原型:
//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0
int IsCancel(int a[], int n, int k);
#include <stdio.h>
#include <stdlib.h>
#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:\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;
}
3寻找鞍点
题目内容:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”
已知函数原型:
void FindSaddlePoint(int a[][N], int m, int n);
在该函数中输出有无鞍点的信息。
#include <stdio.h>
#include <string.h>
#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\n",i,j,a[i][j]);
flag=1;
}
}
}
if(flag==0)
printf("No saddle point!\n");
}
int main()
{
int i,j,n,m;
int a[MAX][MAX];
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计算三位阶乘和数
题目内容:
试求出所有三位阶乘和数:m=a!+b!+c!(其中a为百位数字,b为十位数字,c为个位数字。约定0!=1,并输出所有的m)
#include <stdio.h>
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\n",i);
}
return 0;
}