1. 程式人生 > >吉大軟體專碩896-2008

吉大軟體專碩896-2008

年份比較久遠的,卷子代號都有些不一樣了

有關分數化簡的題:

軟專2012年的第二題(http://blog.csdn.net/qq_21149391/article/details/79430462)

軟專2013年的第四題(http://blog.csdn.net/qq_21149391/article/details/79417404)

化簡分數,即求最大公約數

#include<stdio.h>  
int main(){  
    int max_CommonDivisor(int x,int y);  
    int n,m,max_commonDivisor;   
    printf("請輸入分子m:");  
    scanf("%d",&m);  
    printf("請輸入分母n:");  
    scanf("%d",&n); 
    max_commonDivisor = max_CommonDivisor(m,n);
    printf("化簡後:(%d,%d)\n",m/max_commonDivisor,n/max_commonDivisor);    
}  
/*求x,y的最大公約數*/    
int max_CommonDivisor(int x,int y){    
    int max,min,t;    
    if(x>y){    
        max = x;    
        min = y;    
    }else{    
        max = y;    
        min = x;    
    }    
    while(max % min != 0){    
        t = min;    
        min = max % min;    
        max = t;    
    }    
    return min;    
}    

我的理解是:若此數由1,3,5,7,9之外的數構成,則返回否

若此數由1,3,5,7,9中任意數構成,則返回真

與此題相關:軟專2012年第三題(http://blog.csdn.net/qq_21149391/article/details/79430462)

#include<stdio.h>
#include <stdbool.h>
#define N 20
int main(){
    bool jude(char num[]);
    char num[N];
    printf("請輸入數字:");
    scanf("%s",num);
    if(jude(num))
        printf("此數僅由13579構成\n");
    else
         printf("此數由13579以外的數構成\n");
    return 0;
}
bool jude(char *num){
    int i;
    char s;
    for(i=0;i<strlen(num);i++){
        s=num[i];
        if(s!='1' &&s!='3' &&s!='5' &&s!='7' &&s!='9')
            return false;
    }
    return true;
}


#include<stdio.h>
#define N 10
int main(){
    int *sort(int *A);
    int A[N]={2,7,3,1,9,7,8,6,5,11};
    int *B = sort(A);
    int i;
    //printf("%d---%d\n",odd,even);
    for(i=0;i<N;i++)
        printf("%d\t",B[i]);
    return 0;
}
int *sort(int *A){
    int *B = (int *)malloc(N *sizeof(int));//申請N位空間,不申請會出錯
    
    int i,j,k,odd=N-1,even=0,sign;//odd指向當前B中奇數的最低位,even指向當前B中偶數的最高位
    for(i=0;i<N;i++){
        sign = 0;
        if(A[i] % 2 == 0){//偶數,則插入B前列
            for(j=0;j<even;j++){//從前往後找比A[i]大的第一個數
                if(B[j]>=A[i]){//z找到A[i]要插入的位置位B[j]
                    for(k=even;k>j;k--)//B[j]之後的偶數向後移一位,A[i]插到B[j]
                        B[k] = B[k-1];
                    B[j] = A[i];
                    sign = 1;
                    break;
                }
            }
            
            if(sign == 0)
                B[even] = A[i];//如果沒找到A[i]的位置,說明A[i]是偶陣列中最大的,插入偶陣列末尾even處
            
            even++;//新插入一個,even向後移一位
            
            
        }else{//奇數,同上註釋,反過來
            for(j=N-1;j>odd;j--){
                if(B[j]<=A[i]){
                    for(k=odd;k<j;k++)
                        B[k]=B[k+1];
                    B[j]=A[i];
                    sign = 1;
                    break;
                }
            }
            
            if(sign == 0) B[odd] = A[i]; odd--;
            
        }
    }
    return B;
}


#include<stdio.h> 
#define N 10
int A[N]={2,3,4,8,13,20,23,29,32,43};//定義全域性變數陣列 
int main(){ 
	int n;
	int search(int i,int j,int n); 
    printf("請輸入要查詢的數字:");
    scanf("%d",&n);
    int find = search(0,N-1,n);
    printf("數字%d在陣列A中的位置為:第%d個數\n",n,find);
	return 0;
}
int search(int i,int j,int n){//遞迴,i,j為二分法的兩端,n為要查詢的數 
	int k=(i+j)/2;
	int find;
 	if(n>A[k]){
		find = search(k,j,n);
	}else if(A[k]>n){
		find = search(i,k,n);
	}else
		return k;
	return find;
}