蓝桥杯练习系统习题-算法训练4

文章推荐

蓝桥杯练习系统习题-算法训练4

题目搜索方式:Ctrl+F—-> 输入题目名称—>定位到解答.

入门训练(详见 算法-蓝桥杯习题(1-1))

基础练习(详见 算法-蓝桥杯习题(2-1))

基础练习(详见 算法-蓝桥杯习题(2-2))

算法训练(详见 算法-蓝桥杯习题(3-1))

算法训练(详见 算法-蓝桥杯习题(3-2))

算法训练(详见 算法-蓝桥杯习题(3-3))

算法训练(详见 算法-蓝桥杯习题(3-4))

算法训练(详见 算法-蓝桥杯习题(3-5))

算法训练(详见 算法-蓝桥杯习题(3-6))

算法提高(详见 算法-蓝桥杯习题(4-1))

算法提高(详见 算法-蓝桥杯习题(4-2))

历届试题(详见 算法-蓝桥杯习题(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;  
 }  

算法训练 乘法表

问题描述
  输出九九乘法表。
输出格式
  输出格式见下面的样例。乘号用“”表示。 样例输出 下面给出输出的前几行: 11=1
21=2 22=4
31=3 32=6 33=9 41=4 42=8 43=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;  
 }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-java-maker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值