1.求一串数中大于1素数之和
输入输入个数 数字 不超过100个数 不超过10组 多组输入 0结束
例
输入
4 1 2 3 4
5 1 2 3 4 5
0
输出
5
10
#include <stdio.h> #define MAX 10 bool 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 1000 char 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 100 char 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 1000 struct 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; }
时间: 2024-10-07 17:31:04