算法-蓝桥杯习题(3-4)
- 入门训练(详见 算法-蓝桥杯习题(1-1))
- 基础练习(详见 算法-蓝桥杯习题(2-1))
- 基础练习(详见 算法-蓝桥杯习题(2-2))
- 算法训练(详见 算法-蓝桥杯习题(3-1))
- 算法训练(详见 算法-蓝桥杯习题(3-2))
- 算法训练(详见 算法-蓝桥杯习题(3-3))
- 算法训练(详见 算法-蓝桥杯习题(3-4))
- 算法训练(详见 算法-蓝桥杯习题(3-5))
- 算法训练(详见 算法-蓝桥杯习题(3-6))
- 算法提高(详见 算法-蓝桥杯习题(4-1))
- 算法提高(详见 算法-蓝桥杯习题(4-2))
- 算法提高(详见 算法-蓝桥杯习题(4-3))
- 历届试题(详见 算法-蓝桥杯习题(5-1))
- 历届试题(详见 算法-蓝桥杯习题(5-2))
/* 算法训练 奇偶判断 问题描述 能被2整除的数称为偶数,不能被2整除的数称为奇数。给一个整数x,判断x是奇数还是偶数。 输入格式 输入包括一个整数x,0<=x<=100000000。 输出格式 如果x是奇数,则输出“odd”,如果是偶数,则输出“even”。 样例输入 10 样例输出 even 样例输入 2009 样例输出 odd */ #include <stdio.h> main() { unsigned int x; while(scanf("%d",&x)!=EOF) { if(x%2) { printf("odd\n"); } else { printf("even\n"); } } return 0; }
/* 算法训练 平方计算 问题描述 输入正整数a, m,输出a^2%m,其中^表示乘方,即a^2表示a的平方,%表示取余。 输入格式 输入包含两个整数a, m,a不超过10000。 输出格式 输出一个整数,即a^2%m的值。 样例输入 5 6 样例输出 1 */ #include <stdio.h> main() { unsigned int a,m; scanf("%d%d",&a,&m); printf("%d\n",a*a%m); return 0; }
/* 算法训练 乘法表 问题描述 输出九九乘法表。 输出格式 输出格式见下面的样例。乘号用“*”表示。 样例输出 下面给出输出的前几行: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 …… */ #include <stdio.h> main() { int i,j; for(i=1;i<10;i++) { for(j=1;j<i+1;j++) { printf("%d*%d=%d ",i,j,i*j); } printf("\n"); } return 0; }
/* 算法训练 大小写判断 问题描述 给定一个英文字母判断这个字母是大写还是小写。 输入格式 输入只包含一个英文字母c。 输出格式 如果c是大写字母,输出“upper”,否则输出“lower”。 样例输入 x 样例输出 lower 样例输入 B 样例输出 upper */ #include <stdio.h> #include <string.h> main() { char letter; letter=getchar(); if(letter>='A'&&letter<='Z') { printf("upper\n"); } if(letter>='a'&&letter<='z') { printf("lower\n"); } else { } return 0; }
#include "iostream" #include "string" #include "stdio.h" using namespace std; const int N =1000; bool bArrange[N][N]; int main() { int n; cin>>n; int row=(1<<n); int volumn=1<<(n-1); for(int i = 0; i< row-1 ; i++ ) { cout<<"<"<<i+1<<">"<<"1-"<<i+2; bool isArrage[N]={false}; isArrage[1]=isArrage[i+2]=true; bArrange[1][i+2]=bArrange[i+2][1]=true; for(int j =1 ; j< volumn ; j++) { int a; for( a=2;a<=row;a++) if(isArrage[a]==false) break; for(int b=a+1;b<=row;b++) { if(bArrange[a][b]==false&&isArrage[b]==false) { bArrange[a][b]=bArrange[b][a]=true; isArrage[a]=isArrage[b]=true; cout<<" "<<a<<"-"<<b; break; } } } cout<<endl; } return 0; }
/* 算法训练 字符串编辑 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 ’.’ 结束。编辑功能有:1 D:删除一个字符,命令的方式为: D a 其中a为被删除的字符,例如:D s 表示删除字符 ’s’ ,若字符串中有多个 ‘s’,则删除第一次出现的。 2 I:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。例如:I s d 表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有多个 ‘s’ ,则插入在最后一个字符的前面。 3 R:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。 在编辑过程中,若出现被改的字符不存在时,则给出提示信息。 输入格式 输入文件stringedit.in共两行,第一行为原串(以’.’结束),第二行为命令(输入方式参见“问题描述” 。 输出格式 输出文件stringedit.out共一行,为修改后的字符串或输出指定字符不存在的提示信息。 样例输入 This is a book. D s 样例输出 Thi is a book. D s 输入输出样例解释 命令为删去s,第一个在字符中出现的s在This中,即得到结果。 */ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuffer sb = new StringBuffer(sc.nextLine()); String s = sc.next(); if (s.equalsIgnoreCase("D")) { String a = sc.next(); int l = sb.indexOf(a); System.out.println(sb.deleteCharAt(l)); } else if (s.equalsIgnoreCase("I")) { String a1 = sc.next(); String a2 = sc.next(); int l = sb.lastIndexOf(a1); System.out.println(sb.insert(l, a2)); } else if (s.equalsIgnoreCase("R")) { String a1 = sc.next(); String a2 = sc.next(); if (sb.indexOf(a1) == -1) System.out.println("\u6307\u5b9a\u5b57\u7b26\u4e0d\u5b58\u5728"); else System.out.println(sb.toString().replace(a1, a2)); } } } /* //此答案错误,当时用取巧的方式做的,答案也和测试数据一样,但不知错哪了(用循环链表构建字符串试试) #include <stdio.h> #include <string.h> #define MaxSize 45 void printDelectResult(char *str,char letter) { int i=0,st=0,sp=0; while(str[i]!='.') { if(!st&&str[i]==letter) { st=1; } if(!sp&&st) { i++; if(str[i]=='.') break; sp=1; } printf("%c",str[i]); i++; } printf(".\n"); return ; } void printInsertResult(char *str,char a1,char a2) { int i=0,k=0; while(str[i]!='.') { i++; if(str[i]==a1) { k=i; } } i=0; while(str[i]!='.') { if(i==k) { putchar(a2); } putchar(str[i]); i++; } printf(".\n"); return ; } void printReplaceResult(char *str,char a1,char a2) { int i=0; while(str[i]!='.') { if(str[i]==a1) { putchar(a2); } else { putchar(str[i]); } i++; } printf(".\n"); return ; } main() { char str[MaxSize],T,a1,a2; int i=0,j; str[i]=getchar(); while(str[i]!='.') { i++; str[i]=getchar(); } T=getchar(); getchar();//接收空格键 if(T=='D'||T=='d') { a1=getchar(); printDelectResult(str,a1); } else if(T=='I'||T=='i') { a1=getchar(); getchar();//接收空格键 a2=getchar(); printInsertResult(str,a1,a2); } else if(T=='R'||T=='r') { a1=getchar(); getchar();//接收空格键 a2=getchar(); printReplaceResult(str,a1,a2); } return 0; } */
/* 算法训练 最大值与最小值的计算 时间限制:1.0s 内存限制:512.0MB 输入11个整数,计算它们的最大值和最小值。 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0 */ #include<stdio.h> int main() { int n; int a[11],i1,max=-234234,min=93759347; for(i1=0;i1<11;i1++) { scanf("%d",&a[i1]); if(max<a[i1]) max=a[i1]; if(min>a[i1]) min=a[i1]; } printf("%d %d\n",max,min); return 0; }
/* 算法训练 判定数字 时间限制:1.0s 内存限制:512.0MB 编写函数,判断某个给定字符是否为数字。 样例输入 9 样例输出 yes */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char x; scanf("%c",&x); if('0'<=x&&x<='9') { printf("yes"); } else { printf("no"); } return 0; }
/* 算法训练 字符串逆序 时间限制:1.0s 内存限制:512.0MB 输入一个字符串,长度在100以内,按相反次序输出其中的所有字符。 样例输入 tsinghua 样例输出 auhgnist */ #include <stdio.h> #include <string.h> #define MaxSize 100 int main() { char str[MaxSize]; int lenth; gets(str); lenth=strlen(str); while(lenth--) { putchar(str[lenth]); } printf("\n"); return 0; }
/* 算法训练 最长字符串 时间限制:1.0s 内存限制:512.0MB 求出5个字符串中最长的字符串。每个字符串长度在100以内,且全为小写字母。 样例输入 one two three four five 样例输出 three */ #include<stdio.h> #include<string.h> int main() { char str[5][100]; int len[5]; int i,j,t,max; max=0; for(i=0;i<5;i++) { scanf("%s",str[i]); len[i]=strlen(str[i]); if(len[i]>max) { max=len[i]; t=i; } } puts(str[t]); return 0; }
/* 算法训练 比较字符串 编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的ASCII码的差值:如果s1>s2,则差值为正;如果s1<s2,则差值为负。 样例输入 java basic 样例输出 8 */ #include<stdio.h> #include<string.h> int min(int a,int b) { return a>b?b:a; } int main() { char a[1000]; char b[1000]; scanf("%s",a); scanf("%s",b); int k=min(strlen(a),strlen(b)),i1; int ok=1; for(i1=0;i1<k;i1++) { if(a[i1]!=b[i1]) { printf("%d\n",a[i1]-b[i1]); ok=0; break; } } if(ok==1) if(strlen(a)==strlen(b)) printf("0\n"); else if(strlen(a)>strlen(b)) printf("%d\n",a[i1]); else printf("%d\n",b[i1]); return 0; }
/* 算法训练 成绩的等级输出 输入一个百分制的成绩t后,按下式输出它的等级。等级为:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E。 样例输入 98 样例输出 A */ #include<stdio.h> int main() { int t; scanf("%d",&t); if(t>=90 && t<=100) printf("A\n"); if(t>=80 && t<=89) printf("B\n"); if(t>=70 && t<=79) printf("C\n"); if(t>=60 && t<=69) printf("D\n"); if(t<60) printf("E\n"); return 0; }
/* 算法训练 统计字符次数 输入一个字符串(长度在100以内),统计其中数字字符出现的次数。 样例输入 Ab100cd200 样例输出 6 */ #include<stdio.h> int main() { char a[101]; int i=0,s=0; gets(a); for(i=0;*(a+i)!='\0';i++) { if(*(a+i)>=48&&*(a+i)<=57) s++; } printf("%d",s); return 0; }
/* 算法训练 连接字符串 编程将两个字符串连接起来。例如country与side相连接成为countryside。 输入两行,每行一个字符串(只包含小写字母,长度不超过100);输出一行一个字符串。 样例输入 country side 样例输出 countryside */ #include<stdio.h> #include<string.h> int main() { char s1[202],s2[202]; scanf("%s",s1); scanf("%s",s2); strcat(s1,s2); printf("%s",s1); printf("\n"); return 0; }
/* 算法训练 筛选号码 问题描述 有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。 问最后留下的是原来第几号的那位。 举个例子,8个人围成一圈: 1 2 3 4 5 6 7 8 第1次报数之后,3退出,剩下: 1 2 4 5 6 7 8 (现在从4开始报数) 第2次报数之后,6退出,剩下: 1 2 4 5 7 8 (现在从7开始报数) 第3次报数之后,1退出,剩下: 2 4 5 7 8 (现在从2开始报数) 第4次报数之后,5退出,剩下: 2 4 7 8 (现在从7开始报数) 第5次报数之后,2退出,剩下: 4 7 8 (现在从4开始报数) 第6次报数之后,8退出,剩下: 4 7 (现在从4开始报数) 最后一次报数之后,4退出,剩下: 7. 所以,最后留下来的人编号是7。 输入格式 一个正整数n,(1<n<10000) 输出格式 一个正整数,最后留下来的那个人的编号。 样例输入 8 样例输出 7 数据规模和约定 对于100%的数据,1<n<10000。 */ #include <stdio.h> #include <malloc.h> typedef struct form{ int num; int date; struct form *link;} del; del *creat(int n){ int i; del *head,*p1,*p2; head=(del *)malloc(sizeof(del)); p1=(del *)malloc(sizeof(del)); head->link=p1; for(i=1;i<=n-2;i++){p2=(del *)malloc(sizeof(del)); p1->link=p2; p1=p2;} p1->link=head; return(head); } void dateop(del *h,int n){ del *p; int i,j=1; p=h; for(i=1;i<=n;i++){ p->num=i; p->date=j;j++; if(j==4) j=1; p=p->link;} } int deal(del *h,int n){ del *k; int s; int count,j=1,i; count=n; k=h; while(count!=1){ if(j==3&&k->date!=0) {k->date=0;count--;} k=k->link; j++; if(k->date==0) j--; if(j==4) j=1; } k=h; for(i=1;i<=n;i++){ if(k->date!=0) {s=k->num;break;} k=k->link;} return(s);} int main(){ int x; int i; del *p; scanf("%d",&x); p=creat(x); dateop(p,x); x=deal(p,x); for(i=1;i<x;i++){ p=p->link;} printf("%d",p->num); return 0; }
/* 算法训练 十进制数转八进制数 编写函数把一个十进制数输出其对应的八进制数。 样例输入 9274 样例输出 22072 */ #include<stdio.h> int main() { int r; scanf("%d",&r); printf("%o",r); return 0; }
/* 算法训练 斜率计算 输入两个点的坐标,即p1 = (x1, y1)和p2=(x2, y2),求过这两个点的直线的斜率。如果斜率为无穷大输出“INF”。 样例输入 1 2 2 4 样例输出 2 样例输入 1 2 1 4 样例输出 INF 样例输入 1 2 3 2 样例输出 0 */ #include <stdio.h> int main(){ int a,b,c,d; scanf("%d %d",&a,&b); scanf("%d %d",&c,&d); if(a==c) printf("INF\n"); else printf("%d\n",(b-d)/(a-c)); return 0; }
/* 算法训练 确定元音字母位置 输入一个字符串,编写程序输出该字符串中元音字母的首次出现位置,如果没有元音字母输出0。英语元音字母只有‘a’、‘e’、‘i’、‘o’、‘u’五个。 样例输入 hello 样例输出 2 样例输入 apple 样例输出 1 样例输入 pmp 样例输出 0 */ #include <stdio.h> #include <string.h> char s[1000]={0}; int isyuanyin(char a) { switch(a) { case 'a':return 1; case 'e':return 1; case 'i':return 1; case 'o':return 1; case 'u':return 1; } return 0; } int main() { int l,i,num=0; scanf("%s",s); l=strlen(s); for(i=0;i<l;i++) if(isyuanyin(s[i])) { num=i+1;break; } printf("%d",num); return 0; }
/* 算法训练 整数平均值 编写函数,求包含n个元素的整数数组中元素的平均值。要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值。 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数) 5 3 4 0 0 2 样例输出 1 样例输入 7 3 2 7 5 2 9 1 样例输出 4 */ #include <stdio.h> int main() { int n,i,j,sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&j); sum+=j; } printf("%d",sum/n); return 0; }
本文来自博客园,作者:随手一只风,转载请注明原文链接:https://www.cnblogs.com/suishou/p/15594742.html

浙公网安备 33010602011771号