北京航空航天大学计算机系考研复试上机真题及答案---2014
时间:
2015-07-25 09:22:12
阅读:
320
评论:
收藏:
0
[点我收藏+]
第一题,阶乘数。
输入一个正整数,输出时,先输出这个数本身,跟着一个逗号,再输出这个数的各位数字的阶乘和,等号,阶乘和的计算结果,并判断阶乘和是否等于原数,如果相等输出Yes,否则输出No。题目说明输入的正整数以及其各位阶乘和都不会超出int型的表示范围。
输入样例1:
145
输出样例1:
145,1!+4!+5!=145
Yes
输入样例2:
1400
输出样例2:
1400,1!+4!+0!+0!=27
No
第二题,五子棋。
输入一个19*19的矩阵,只包含数字0、1、2,表示两人下五子棋的棋牌状态,1、2分别表示两人的棋子,0表示空格。要求判断当前状态下是否有人获胜(横向、竖向或者斜线方向连成5个同色棋子)。题目说明输入样例保证每条线上至多只有连续5个同色棋子,并且保证至多只有1人获胜。如果有人获胜,输出获胜者(1或2)加一个冒号,接着输出获胜的五连珠的第一个棋子的坐标,从上到下从左到右序号最小的为第一个,序号从1开始编号。如果无人获胜,输出no。
参考答案(本人编写,仅用于交流)
第一题
#include"stdio.h"
int factorial(int n){
int sum=1;
for(int i=2; i<=n; i++){
sum = sum*i;
}
return sum;
}
void sum(int n){
int a,b = n;
int s = 0;
int m=10;//注意是正序输出,不是逆序输出,因此要从前面开始除
while(b/m != 0){
m = m*10;
}
m = m/10;
while(m !=0 ){
a = b/m;
printf("%d!",a);
b = b - a*m;
s = s + factorial(a);
m = m/10;
if(m != 0){
printf("+");
}else{
printf("=%d\n",s);
}
}
if(n == s){
printf("Yes\n");
}else{
printf("No\n");
}
}
int main(){
int n;
freopen("c:\\input.txt","r",stdin);
scanf("%d",&n);
printf("%d,",n);
sum(n);
return 0;
}
第二题
//随进生成数组,与题意并不是100%符合,但寻找方法没问题
#include
#include
#include
#define M 19
#define N 19
void isWin(int a[M][N],int m,int n){
int t1,t2,t3,t4;
int i=0,j=0;
for(i=0; i=0){
t4 = a[i][j] & a[i+1][j-1] & a[i+2][j-2] & a[i+3][j-3] & a[i+4][j-4];
}
if(t1 !=0 || t2 != 0 || t3!=0 || t4 != 0){
break;
}
}
if(t1 !=0 || t2 != 0 || t3!=0 || t4 != 0){
break;
}
}
if(t1 !=0){
printf("%d:%d,%d\n",t1,i+1,j+1);
}
else if(t2 !=0){
printf("%d:%d,%d\n",t2,i+1,j+1);
}
else if(t3 !=0){
printf("%d:%d,%d\n",t3,i+1,j+1);
}
else if(t4 !=0){
printf("%d:%d,%d\n",t4,i+1,j+1);
}else{
printf("no\n");
}
}
int main(){
srand(time(0));
int a[M][N];
for(int i=0; i北京航空航天大学计算机系考研复试上机真题及答案---2014原文:http://www.cnblogs.com/shuaishuai-it/p/4675257.html