您的位置:首页 > 其它

2014年北航机考题(推免)

2016-06-25 16:22 267 查看
2014.

第一题,阶乘数。

输入一个正整数,输出时,先输出这个数本身,跟着一个逗号,再输出这个数的各位数字的阶乘和,等号,

阶乘和的计算结果,并判断阶乘和是否等于原数,如果相等输出Yes,否则输出No。题目说明输入的正整数

以及其各位阶乘和都不会超出int型的表示范围。

输入样例1:

145

输出样例1:

145,1!+4!+5!=145

Yes

输入样例2:

1400

输出样例2:

1400,1!+4!+0!+0!=27

No

#include <stdio.h>
#include <stdlib.h>

double fun(int x)
{
double sum = 1;
for(int i=1;i<=x;i++){
sum *= i;
}
return sum;
}

int main()
{
int x;
int a[10];
int i=-1;
int temp;
int flag = 0;
double sum = 0;
scanf("%d",&x);
temp = x;
while(x>=1){
a[++i] = x%10;
x = x/10;
}
for(int j=i;j>=0;j--){
printf("%d!",a[j]);
if(flag<i)printf("+");
sum += fun(a[j]);
flag++;
}
printf("=%f\n",sum);
if(sum==temp)printf("YES");
else printf("NO");
}


第二题,五子棋。

输入一个19*19的矩阵,只包含数字0、1、2,表示两人下五子棋的棋牌状态,1、2分别表示两人的棋子,0表示空格。

要求判断当前状态下是否有人获胜(横向、竖向或者斜线方向连成5个同色棋子)。题目说明输入样例保证每条线上至多

只有连续5个同色棋子,并且保证至多只有1人获胜。如果有人获胜,输出获胜者(1或2)加一个冒号,接着输出获胜的

五连珠的第一个棋子的坐标,从上到下从左到右序号最小的为第一个,序号从1开始编号。如果无人获胜,输出no。

#include <stdio.h>
#include <stdlib.h>
#define maxn 19

int main()
{
//int a[19][19];
int flag = 0;
FILE *fp;
/*for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
scanf("%d",&a[i][j]);*/
fp = fopen("E:\\U盘\\1.txt","r");//打开文件 注意要用双斜杠

int a[maxn][maxn];
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
fscanf(fp,"%d",&a[i][j]);

for(int i=0;i<19;i++)
for(int j=0;j<19;j++){
if(a[i][j]!=0){
for(int k=i;k<i+5;k++){
if(a[i][j]==a[k][j])
flag++;
}
if(flag==5){
printf("获胜者%d:%d %d",a[i][j],i,j);
goto loop;
}
flag = 0;
for(int k=j;k<j+5;k++){
if(a[i][j]==a[i][k])
flag++;
}
if(flag==5){
printf("获胜者%d:%d %d",a[i][j],i,j);
goto loop;
}
flag = 0;
for(int k=i,l=j;k<i+5&&l<j+5;k++,l++){
if(a[i][j]==a[k][l])
flag++;
}
if(flag==5){
printf("获胜者%d:%d %d",a[i][j],i,j);
goto loop;
}
flag = 0;
for(int k=i,l=j;k<i-5&&l<j-5&&k>=0&&l>=0;k--,l--){
if(a[i][j]==a[k][l])
flag++;
}
if(flag==5){
printf("获胜者%d:%d %d",a[i][j],i,j);
goto loop;
}
flag = 0;
}
}
loop:printf("");
if(flag!=5){
printf("NO!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: