吉大软件专硕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;
} 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Manigoldo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值