年份比较久远的,卷子代号都有些不一样了
有关分数化简的题:
软专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;
}