第一题
/*
北航机试15年01相亲数:
从2开始求约数,保存在数组中
*/
#include<stdio.h>
#include<math.h>
int a[50], b[50], buf[50]; //保存x,y的约数
//输出结果
void output(int *x,int *buf, int *size, int *sum){
printf("%d,", *x);
for(int i=*size-1;i>0;i--){
printf("%d+", buf[i]);
}
printf("1=%d\n", *sum);
}
int main(){
int x, y, sumx, sumy;
int sizea, sizeb;
while(scanf("%d%d", &x, &y)!=EOF){
sizea=sizeb=sumx=sumy=a[0]=b[0]=1;
//计算x的约数, 为提高速度,只用求出x^(1/2)内的约数即可
int bound=(int)sqrt(x)+1;
int i, len=0;
for(i=2;i<bound;i++){
if(x%i==0){
a[sizea++]=i;
buf[len++]=x/i;
sumx+=i+x/i;
}
}
for(i=len-1;i>=0;i--){
a[sizea++]=buf[i];
}
//计算y的约数
len=0;
bound=(int)sqrt(y)+1;
for(i=2;i<bound;i++){
if(y%i==0){
b[sizeb++]=i;
buf[len++]=y/i;
sumy+=i+y/i;
}
}
for(i=len-1;i>=0;i--){
b[sizeb++]=buf[i];
}
output(&x, a, &sizea, &sumx);
output(&y, b, &sizeb, &sumy);
if(sumx==y && sumy==x) printf("1\n");
else printf("0\n");
}
return 0;
}
第二题
第三题
/*
北航机试15年03挑选单词:
使用字符串数组保存单词
首先读出单词,利用二分查找把单词插入到单词表中
*/
#include"stdafx.h"
#include<stdio.h>
#include<string.h>
char words[100][20]; //单词表
int size; //已经找到的单词个数
//把单词插入到词典中
void insert(char* tmp, int p){
if(size==0){
strcpy(words[0], tmp);
}else if(p<size){
for(int i=size;i>p;i--){
strcpy(words[i], words[i-1]);
}
}
strcpy(words[p], tmp);
size++;
}
//采用二分查找的方式查找
void search(char* tmp, int left, int right){
if(left>right){
//printf("left:%d, right:%d\n", left, right);
insert(tmp, left);
}else{
int mid=(left+right)/2;
int a=strcmp(tmp, words[mid]);
if(a==0){
return;
}else if(a<0){
right=mid-1;
}else{
left=mid+1;
}
search(tmp, left, right);
}
}
//输出单词表
void output(){
for(int i=0;i<size;i++){
printf("%s\n", words[i]);
}
}
int main(){
FILE *fp=fopen("e:\\test.txt", "r");
char tmp[20];
size=0;
int len=0;
bool flag=false;
while(!feof(fp)){
int c=fgetc(fp);
//追加字符
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
//把大写字母转换为小写
if(c>='A'&&c<='Z'){
c=(c-'A')+'a';
}
tmp[len++]=c;
tmp[len]=0;
flag=true;
}else if(flag){
//printf("%d: %s\n",size, tmp);
search(tmp, 0, size-1); //!!!!注意size-1,单词表words[size]为空!!!
//printf("%s---------------\n", tmp);
//output();
//printf("------------------------\n");
len=0;
flag=false;
}
}
fclose(fp);
printf("%d\n", size);
output();
return 0;
}
答案在百度网盘 北航机试历年真题及参考答案文件中(P46)