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

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 蓝桥杯练习系统习题-算法训练4

文章推荐


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

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


入门训练
基础练习
基础练习
算法训练
算法训练
算法训练
算法训练
算法训练
算法训练
算法提高
算法提高
历届试题
历届试题

基础练习

算法训练

算法训练

算法训练

算法提高

历届试题

算法训练 奇偶判断

问题描述   能被2整除的数称为偶数,不能被2整除的数称为奇数。给一个整数x,判断x是奇数还是偶数。 输入格式   输入包括一个整数x,0<=x<=100000000。 输出格式   如果x是奇数,则输出“odd”,如果是偶数,则输出“even”。 样例输入 10 样例输出 even 样例输入 2009 样例输出 odd


 #include &lt;stdio.h&gt;  
 main()  
 {  
     unsigned int x;  
     while(scanf("%d",&amp;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 &lt;stdio.h&gt;  
 main()  
 {  
     unsigned int a,m;  
     scanf("%d%d",&amp;a,&amp;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 &lt;stdio.h&gt;  
 main()  
 {  
     int i,j;  
     for(i=1;i&lt;10;i++)  
     {  
         for(j=1;j&lt;i+1;j++)  
         {  
             printf("%d*%d=%d ",i,j,i*j);  
         }  
         printf("\n");  
     }  
     return 0;  
 }  

算法训练 大小写判断

问题描述   给定一个英文字母判断这个字母是大写还是小写。 输入格式   输入只包含一个英文字母c。 输出格式   如果c是大写字母,输出“upper”,否则输出“lower”。 样例输入 x 样例输出 lower 样例输入 B 样例输出 upper


 #include &lt;stdio.h&gt;  
 #include &lt;string.h&gt;  
 main()  
 {  
     char letter;  
     letter=getchar();  
     if(letter&gt;='A'&amp;&amp;letter&lt;='Z')  
     {  
         printf("upper\n");  
     }  
     if(letter&gt;='a'&amp;&amp;letter&lt;='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&gt;&gt;n;  
     int row=(1&lt;&lt;n);  
     int volumn=1&lt;&lt;(n-1);  
     for(int i = 0; i&lt; row-1 ; i++ )  
     {  
         cout&lt;&lt;"&lt;"&lt;&lt;i+1&lt;&lt;"&gt;"&lt;&lt;"1-"&lt;&lt;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&lt; volumn ; j++)  
         {  
             int a;  
             for( a=2;a&lt;=row;a++)  
                 if(isArrage[a]==false)  
                     break;  
             for(int b=a+1;b&lt;=row;b++)  
             {  
                 if(bArrange[a][b]==false&amp;&amp;isArrage[b]==false)  
                 {  
                     bArrange[a][b]=bArrange[b][a]=true;  
                     isArrage[a]=isArrage[b]=true;  
                     cout&lt;&lt;" "&lt;&lt;a&lt;&lt;"-"&lt;&lt;b;  
                     break;  
                 }  
             }  
         }  
         cout&lt;&lt;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 &lt;stdio.h&gt; 
 #include &lt;string.h&gt; 
 #define MaxSize 45 
 void printDelectResult(char *str,char letter) 
 { 
     int i=0,st=0,sp=0; 
     while(str[i]!='.') 
     { 
         if(!st&amp;&amp;str[i]==letter) 
         { 
             st=1; 
         } 
         if(!sp&amp;&amp;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&lt;stdio.h&gt;  
 int main()  
 {  
     int n;  
     int a[11],i1,max=-234234,min=93759347;  
     for(i1=0;i1&lt;11;i1++)  
     {  
         scanf("%d",&amp;a[i1]);  
         if(max&lt;a[i1])  
           max=a[i1];  
         if(min&gt;a[i1])  
            min=a[i1];  
     }  
     printf("%d %d\n",max,min);  
     return 0;  
 }  

算法训练 判定数字 时间限制:1.0s 内存限制:512.0MB

  编写函数,判断某个给定字符是否为数字。 样例输入 9 样例输出 yes


 #include &lt;stdio.h&gt;  
 #include &lt;stdlib.h&gt;  
 int main(int argc, char *argv[])   
 {  
     char x;  
     scanf("%c",&amp;x);  
     if('0'&lt;=x&amp;&amp;x&lt;='9')  
     {  
         printf("yes");  
     }  
     else  
     {  
         printf("no");  
     }  
     return 0;  
 }  

算法训练 字符串逆序 时间限制:1.0s 内存限制:512.0MB

  输入一个字符串,长度在100以内,按相反次序输出其中的所有字符。 样例输入 tsinghua 样例输出 auhgnist


 #include &lt;stdio.h&gt;  
 #include &lt;string.h&gt;  
 #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&lt;stdio.h&gt;  
 #include&lt;string.h&gt;  
 int main()  
 {  
     char str[5][100];  
     int len[5];  
     int i,j,t,max;  
     max=0;  
     for(i=0;i&lt;5;i++)  
     {  
         scanf("%s",str[i]);  
         len[i]=strlen(str[i]);  
         if(len[i]&gt;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&lt;stdio.h&gt;  
 #include&lt;string.h&gt;  
 int min(int a,int b)  
 {  
 return a&gt;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&lt;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)&gt;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&lt;stdio.h&gt;  
 int main()  
 {  
     int t;  
     scanf("%d",&amp;t);  
     if(t&gt;=90 &amp;&amp; t&lt;=100)  
     printf("A\n");  
     if(t&gt;=80 &amp;&amp; t&lt;=89)  
     printf("B\n");  
     if(t&gt;=70 &amp;&amp; t&lt;=79)  
     printf("C\n");  
     if(t&gt;=60 &amp;&amp; t&lt;=69)  
     printf("D\n");  
     if(t&lt;60)  
     printf("E\n");  
     return 0;  
 }  

算法训练 统计字符次数

  输入一个字符串(长度在100以内),统计其中数字字符出现的次数。 样例输入 Ab100cd200 样例输出 6


 #include&lt;stdio.h&gt;  
 int main()  
 {  
     char a[101];  
     int i=0,s=0;  
     gets(a);  
     for(i=0;*(a+i)!='\0';i++)  
     {  
         if(*(a+i)&gt;=48&amp;&amp;*(a+i)&lt;=57)  
         s++;  
     }  
     printf("%d",s);  
 return 0;  
 }  

算法训练 连接字符串

 编程将两个字符串连接起来。例如country与side相连接成为countryside。   输入两行,每行一个字符串(只包含小写字母,长度不超过100);输出一行一个字符串。 样例输入 country side 样例输出 countryside


 #include&lt;stdio.h&gt;  
 #include&lt;string.h&gt;  
 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 &lt;stdio.h&gt;   
 #include &lt;malloc.h&gt;   
 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-&gt;link=p1;   
 for(i=1;i&lt;=n-2;i++){p2=(del *)malloc(sizeof(del));   
 p1-&gt;link=p2;   
 p1=p2;}   
 p1-&gt;link=head;   
 return(head);   
 }   
 void dateop(del *h,int n){   
     del *p;   
     int i,j=1;   
     p=h;   
     for(i=1;i&lt;=n;i++){   
     p-&gt;num=i;   
     p-&gt;date=j;j++;   
     if(j==4) j=1;   
     p=p-&gt;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&amp;&amp;k-&gt;date!=0) {k-&gt;date=0;count--;}   
 k=k-&gt;link;   
     j++;   
     if(k-&gt;date==0) j--;   
 if(j==4) j=1;   
     }   
     k=h;   
     for(i=1;i&lt;=n;i++){   
     if(k-&gt;date!=0) {s=k-&gt;num;break;}   
     k=k-&gt;link;}   
     return(s);}   
 int main(){   
     int x;   
     int i;   
     del *p;   
     scanf("%d",&amp;x);   
     p=creat(x);   
     dateop(p,x);   
     x=deal(p,x);   
     for(i=1;i&lt;x;i++){   
     p=p-&gt;link;}   
     printf("%d",p-&gt;num);   
 return 0;   
 }  

算法训练 十进制数转八进制数

  编写函数把一个十进制数输出其对应的八进制数。 样例输入 9274 样例输出 22072


 #include&lt;stdio.h&gt;  
 int main()  
 {  
     int r;  
     scanf("%d",&amp;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 &lt;stdio.h&gt;  
 int main(){  
   int a,b,c,d;  
   scanf("%d %d",&amp;a,&amp;b);  
   scanf("%d %d",&amp;c,&amp;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 &lt;stdio.h&gt;  
 #include &lt;string.h&gt;  
 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&lt;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 &lt;stdio.h&gt;  
 int main()  
 {  
 int n,i,j,sum=0;  
 scanf("%d",&amp;n);  
 for(i=0;i&lt;n;i++)  
 {  
 scanf("%d",&amp;j);  
 sum+=j;  
 }  
 printf("%d",sum/n);  
 return 0;  
 }  

原文地址:https://sihai.blog.csdn.net/article/details/79238880

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 蓝桥杯练习系统习题-算法训练4


 上一篇
蓝桥杯练习系统习题-算法训练2 蓝桥杯练习系统习题-算法训练2
文章推荐 蓝桥杯练习系统习题-算法训练2 题目搜索方式:Ctrl+F—-> 输入题目名称—>定位到解答. 入门训练 基础练习 基础练习 算法训练 算法训练 算法训练 算法训练 算法训练 算法训练 算
2021-04-04
下一篇 
蓝桥杯练习系统习题-算法训练5 蓝桥杯练习系统习题-算法训练5
文章推荐 蓝桥杯练习系统习题-算法训练5题目搜索方式:Ctrl+F—-> 输入题目名称—>定位到解答. 入门训练 基础练习 基础练习 算法训练 算法训练 算法训练 算法训练 算法训练 算法训练 算法提高 算法提高 历届
2021-04-04