北京航空航天大學計算機系考研複試上機真題及答案---2014

第一題,階乘數。spa

輸入一個正整數,輸出時,先輸出這個數自己,跟着一個逗號,再輸出這個數的各位數字的階乘和,等號,code

階乘和的計算結果,並判斷階乘和是否等於原數,若是相等輸出Yes,不然輸出No。題目說明輸入的正整數blog

以及其各位階乘和都不會超出int型的表示範圍。input


輸入樣例1:io

       145class


輸出樣例1:方法

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

       Yes數據


輸入樣例2:di

       1400


輸出樣例2:

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

       No

 

第二題,五子棋。

輸入一個19*19的矩陣,只包含數字0、一、2,表示兩人下五子棋的棋牌狀態,一、2分別表示兩人的棋子,0表示空格。

要求判斷當前狀態下是否有人獲勝(橫向、豎向或者斜線方向連成5個同色棋子)。題目說明輸入樣例保證每條線上至多

只有連續5個同色棋子,而且保證至多隻有1人獲勝。若是有人獲勝,輸出獲勝者(1或2)加一個冒號,接着輸出獲勝的

五連珠的第一個棋子的座標,從上到下從左到右序號最小的爲第一個,序號從1開始編號。若是無人獲勝,輸出no。


樣例略。

參考答案(我的編寫僅用於交流)

第一題

 1 #include"stdio.h"
 2 
 3 
 4 ////shuaishuaizhang
 5 
 6 int factorial(int n){  7     int sum=1;  8     for(int i=2; i<=n; i++){  9         sum = sum*i; 10  } 11     return sum; 12 } 13 
14 void sum(int n){ 15     
16     
17     int a,b = n; 18     int s = 0; 19 
20     int m=10; 21     while(b/m != 0){ 22         m = m*10; 23  } 24     m = m/10; 25 
26     while(m !=0 ){//注意是正序輸出非倒序輸出
27         a = b/m; 28         printf("%d!",a); 29         b = b - a*m; 30         s = s + factorial(a); 31         m = m/10; 32         if(m != 0){ 33             printf("+"); 34         }else{ 35             printf("=%d\n",s); 36  } 37  } 38     if(n == s){ 39         printf("Yes\n"); 40     }else{ 41         printf("No\n"); 42  } 43     
44 } 45 
46 int main(){ 47     int n; 48     freopen("c:\\input.txt","r",stdin);//輸入方式
49     scanf("%d",&n); 50     printf("%d,",n); 51  sum(n); 52     return 0; 53 }

 

第二題

//輸入數據不符合題意,但方法正確

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 #define M 19
 6 #define N 19
 7 
 8 //shuaishuaizhang
 9 
10 void isWin(int a[M][N],int m,int n){ 11     int t1,t2,t3,t4; 12     int i=0,j=0; 13     for(i=0; i<m; i++){ 14         t1 =0,t2 = 0, t3 = 0, t4 = 0; 15         for(j=0; j<n; j++){ 16             if(j+4<19){ 17             t1 = a[i][j] & a[i][j+1] & a[i][j+2] & a[i][j+3] & a[i][j+4]; 18  } 19             if(i+4<19 && j+4<19){ 20             t2 = a[i][j] & a[i+1][j+1] & a[i+2][j+2] & a[i+3][j+3] & a[i+4][j+4]; 21  } 22             if(i+4<19){ 23             t3 = a[i][j] & a[i+1][j] & a[i+2][j] & a[i+3][j] & a[i+4][j]; 24  } 25             if(i+4<19 && j-4>=0){ 26             t4 = a[i][j] & a[i+1][j-1] & a[i+2][j-2] & a[i+3][j-3] & a[i+4][j-4]; 27  } 28 
29             if(t1 !=0 || t2 != 0 || t3!=0 || t4 != 0){ 30                 break; 31  } 32  } 33         if(t1 !=0 || t2 != 0 || t3!=0 || t4 != 0){ 34                 break; 35  } 36  } 37     if(t1 !=0){ 38         printf("%d:%d,%d\n",t1,i+1,j+1); 39  } 40     else if(t2 !=0){ 41         printf("%d:%d,%d\n",t2,i+1,j+1); 42  } 43     else if(t3 !=0){ 44         printf("%d:%d,%d\n",t3,i+1,j+1); 45  } 46     else if(t4 !=0){ 47         printf("%d:%d,%d\n",t4,i+1,j+1); 48     }else{ 49         printf("no\n"); 50  } 51 
52 } 53 
54 int main(){ 55     srand(time(0)); 56     int a[M][N]; 57     for(int i=0; i<M; i++){ 58         for(int j=0; j<N; j++){ 59             a[i][j] = rand()%3; 60             printf("%d ",a[i][j]); 61  } 62         printf("\n"); 63  } 64  isWin(a,M,N); 65     
66     return 0; 67 }
相關文章
相關標籤/搜索