標籤:考研 機試題 複試 演算法
1.求一串數中大於1素數之和
輸入輸入個數 數字 不超過100個數 不超過10組 多組輸入 0結束
例
輸入
4 1 2 3 4
5 1 2 3 4 5
0
輸出
5
10
#include <stdio.h>#define MAX 10bool isPrime(int n){//判斷是否是素數bool flag = true;if( n <=1) return false;for(int i = 2; i*i <= n; i++){if(n % i == 0){flag = false;break;}}return flag;}int main(){int res[MAX];int sum,num,n,cnt;cnt = 0;while(scanf("%d",&n) != EOF && n != 0){sum = 0;for(int i = 0; i < n; i++){scanf("%d",&num);if(isPrime(num))sum += num;}res[cnt++] = sum;}for(int i = 0; i < cnt; i++){printf("%d\n",res[i]);}return 0;}
2.壓縮字串
輸入只含A-Z的字串 不超過1000個字母 將連續相同字母壓縮為重複次數+字幕(這個忘記是多組輸入還是單組了)
例
輸入
ABBCCC
輸出
A2B3C
#include <stdio.h>#include <string.h>#define N 1000char str[N];char ans[N];int main(){while(scanf("%s",str) != EOF){int len = strlen(str); ans[0] = str[0];int i = 1,j = 0,count = 1; char pre = str[0];while(1){char tmp = str[i];if(tmp != pre){j++;if(count >= 2) ans[j++] = count+'0';count = 1;ans[j] = str[i++];pre = tmp;}else{count++;i++;}if(tmp == '\0')break;}puts(ans);printf("\n");}return 0;}
3.機器人走迷宮
迷宮由 N W S E 組成 踩到N向上走一格 踩到W 向左走一格 踩到S向下走一格 踩到E 向右走一格
輸入迷宮行數 列數 不大於10 機器人初始列數(注意 這個列數是從1開始數的) 判斷能否走出迷宮。能走出輸出步數
多組輸入 遇 0 0 0 結束輸入
例
輸入
4 6 5
NNNNSN
NNNSWN
NNSWNN
NSWNNN
3 5 2
NSNNNN
NSWNNN
NENNNN
0 0 0
輸出
7
no
#include <stdio.h>#define MAX 100char buf[MAX][MAX];bool mark[MAX][MAX];int main(){int m,n,sx,sy;while(scanf("%d%d%d%d",&m,&n,&sx,&sy) != EOF){if(m == 0 && n == 0)break;getchar();for(int i = 0; i < m; i++){scanf("%s",buf[i]);getchar();}for( i = 0; i < m; i++){for(int j = 0; j < n; j++)mark[i][j] = false;}int count = 0;while(1){//printf("%d %d\n",sx,sy);if(sx < 0 || sx > m-1 || sy < 0 || sy > n-1){printf("%d\n",count);break;}if(mark[sx][sy]){printf("no\n");break;}switch(buf[sx][sy]){case 'W':mark[sx][sy] = true;sy--;count++;break;case 'E':mark[sx][sy] = true;sy++;count++;break;case 'S':mark[sx][sy] = true;sx++;count++;break;case 'N':mark[sx][sy] = true;sx--;count++;break;}}}return 0;}
4.成績排行(這個具體排序的順序記不清了 但是就是讀取檔案+ 排序)
從檔案Score。txt中讀取學生資訊 對其進行排序 學生資訊包括學號不高於20位 題目數不超過10 分數 首先按照回答題數從大往小排 題數一樣的按照分數從小往大排。
例
檔案內容
CS00000001 4 110
CS00000002 4 120
CS00000003 5 150
輸出
CS00000003 5 150
CS00000001 4 110
CS00000002 4 120
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define N 1000struct sts{char no[30];int num;int score;}stu[N];bool cmp(sts A, sts B){if(A.num != B.num)return A.num > B.num;if(A.score != B.score)return A.score < B.score;else{ int tmp = strcmp(A.no,B.no);return tmp < 0;}}int main(){FILE *fp;if((fp = fopen("Score.txt","r")) == NULL){printf("Read file failed\n");return -1;}int i = 0;while(!feof(fp)){fscanf(fp,"%s%d%d",stu[i].no,&stu[i].num,&stu[i].score); i++;}sort(stu,stu+i,cmp);for(int j = 0; j < i; j++)printf("%s %d %d\n",stu[j].no,stu[j].num,stu[j].score);fclose(fp);return 0;}
考研機試題(2014)