蓝桥杯练习系统习题-算法提高2

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

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

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

文章推荐


蓝桥杯练习系统习题-算法提高2

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



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

基础练习

算法训练

算法训练

算法训练

算法提高

历届试题


Torry的困惑(提高型)  

 #include<stdio.h>  
 #include<math.h>  
 int is_prime(int x) {  
     int i,s = sqrt(x);  
     for(i = 2; i <= s; i++) {  
         if(x % i == 0) {  
             return 0;  
         }  
     }  
     return 1;  
 }  
 int main()  
 {  
     //("%d",is_prime(2));  
     int n,count=0,i=1;  
     long long result=1;  
     scanf("%d",&n);  
     while(count<n)  
     {  
         i++;  
         if(is_prime(i))  
         {  
             result=(result%50000)*(i%50000)%50000;  
             count++;  
         }  
     }  
     printf("%I64d\n",result);  
     return 0;  
 }  

计算时间  

#include <stdio.h>  
 #include <stdlib.h>  
 int b[100000][3];  
 int main(int argc, char *argv[]) {  
     int i,n=0,a;  
     scanf("%d",&n);  
         for(i=0;i<n;i++)  
         {  
             scanf("%d",&a);  
             b[i][0]=a%60;a/=60;  
             b[i][1]=a%60;  
             b[i][2]=a/=60;    
         }  
     for(i=0;i<n;i++)  
     {  
         printf("%02d:%02d:%02d\n",b[i][2],b[i][1],b[i][0]);  
     }  
     return 0;  
 }  

最小乘积(提高型)  

 #include "stdio.h"  
 #define Size 1002  
 int part1(int a[],int left,int right)  
 {  
     int x;  
     int low;  
     int high;  
     x=a[left];  
     low=left;  
     high=right;  
     while(low<high)  
     {  
         while(a[high]>x&&low<high)  
         {  
             high--;  
         }  
         if(low<high)  
         {  
             a[low]=a[high];  
             low++;  
         }  
         while(a[low]<x&&low<high)  
         {  
             low++;  
         }  
         if(low<high)  
         {  
             a[high]=a[low];  
             high--;  
         }  
     }  
     a[low]=x;  
     return low;  
 }  
 int part2(int a[],int left,int right)  
 {  
     int x;  
     int low;  
     int high;  
     x=a[left];  
     low=left;  
     high=right;  
     while(low<high)  
     {  
         while(a[high]<x&&low<high)  
         {  
             high--;  
         }  
         if(low<high)  
         {  
             a[low]=a[high];  
             low++;  
         }  
         while(a[low]>x&&low<high)  
         {  
             low++;  
         }  
         if(low<high)  
         {  
             a[high]=a[low];  
             high--;  
         }  
     }  
     a[low]=x;  
     return low;  
 }  
 void sort2(int a[],int low,int high)  
 {  
     int mid;  
     if(low<high)  
     {  
         mid=part2(a,low,high);  
         sort2(a,low,mid-1);  
         sort2(a,mid+1,high);  
     }  
 }  
 void sort1(int a[],int low,int high)  
 {  
     int mid;  
     if(low<high)  
     {  
         mid=part1(a,low,high);  
         sort1(a,low,mid-1);  
         sort1(a,mid+1,high);  
     }  
 }  
 int main()  
 {  
     int T;  
     int n;  
     int i;  
     int a[Size];  
     int b[Size];  
     int l;  
     int sum;  
     scanf("%d",&T);  
     while(T)  
     {  
         scanf("%d",&n);  
         for(i=1;i<=n;i++)  
         {  
             scanf("%d",&a[i]);  
         }  
         for(i=1;i<=n;i++)  
         {  
             scanf("%d",&b[i]);  
         }  
         sort1(a,1,n);  
         sort2(b,1,n);  
         sum=0;  
         for(l=1;l<=n;l++)  
         {  
             sum=sum+(a[l]*b[l]);  
         }  
         printf("%d",sum);  
         printf("\n");  
         T--;  
     }  
     return 0;  
 }  

卡勒沃夫之弱水路三千(提高型)  

 #include<stdio.h>  
 #include<string.h>  
 #include<stdlib.h>  
 char mm[105][15];  
 char s1[15],s2[15];  
 int link[105][2];  
 int length[105]={<!-- -->0};  
 int in[105];  
 int N;  
 typedef struct{<!-- -->  
     char name[15];  
     int num;  
 }girl;  
 void fun(int x)  
 {  
     int i,y;  
     for(i=0;i&lt;N;i++)  
         if(link[i][0]==x)  
         {  
             y=link[i][1];  
             length[ y ]=length[x]+1&gt;=length[y]?length[x]+1:length[y];  
             fun(y);  
         }  
 }  
 int comp(const void *a, const void *b)  
 {  
     return (*(girl *)a).num&gt;(*(girl *)b).num?1:-1;  
 }  
 int main()  
 {  
     int i,j,T,n,f,x,y,sum=0;  
     girl g[105];  
     scanf("%d",&amp;T);  
     while(T--)  
     {  
         memset(mm,0,sizeof(mm));  
         memset(link,0,sizeof(mm));  
         memset(in,0,sizeof(in));  
         memset(length,0,sizeof(length));  
         scanf("%d",&amp;N);  
         n=0;  
         for(i=0;i&lt;N;i++)  
         {  
             scanf("%s%s",s1,s2);  
             f=0;  
             for(j=0;j&lt;n;j++)  
                 if(strcmp(s1,mm[j])==0)  
                 {  
                     f=1;  
                     break;  
                 }  
             if(f==1)  
                 x=j;  
             else  
             {  
                 strcpy(mm[n++],s1);  
                 x=n-1;  
             }  
             f=0;  
             for(j=0;j&lt;n;j++)  
                 if(strcmp(s2,mm[j])==0)  
                 {  
                     f=1;  
                     break;  
                 }  
             if(f==1)  
                 y=j;  
             else  
             {  
                 strcpy(mm[n++],s2);  
                 y=n-1;  
             }  
             link[i][0]=x;  
             link[i][1]=y;  
         }  
         for(i=0;i&lt;N;i++)  
             in[link[i][1]]++;  
         for(i=0;i&lt;n;i++)  
             if(in[i]==0)  
                 break;  
         fun(i);  
         for(i=0;i&lt;n;i++)  
         {  
             strcpy(g[i].name,mm[i]);  
             g[i].num=length[i];  
         }  
         qsort(g,n,sizeof(g[0]),comp);  
         for(i=0;i&lt;n;i++)  
         {  
             printf("%s",g[i].name);  
             if(i==n-1)  
                 printf("\n");  
             else  
                 printf(" ");  
         }  
     }  
     return 0;  
 }  

最大乘积  

#include&lt;stdio.h&gt;  
 #include&lt;stdlib.h&gt;  
 #include&lt;string.h&gt;  
 int max;  
 void fun(int *val,int index,int size,int m,int cnt,int res);  
 int main()  
 {  
     int n,m,x,i;  
     int val[15];  
     scanf("%d",&amp;x);  
     while(x--)  
     {  
         scanf("%d %d",&amp;n,&amp;m);  
         for(i=0;i&lt;n;i++)  
         {  
             scanf("%d",&amp;val[i]);  
         }  
         max = -10000000;  
         fun(val,0,n,m,0,1);  
         printf("%d\n",max);  
     }  
     return 0;  
 }  
 void fun(int *val,int index,int size,int m,int cnt,int res)  
 {  
     if(m==cnt)  
     {  
         if(res &gt; max)  
         {  
             max = res;  
         }  
         return ;  
     }  
     if(index&gt;=size)  
     {  
         return ;  
     }  
     fun(val,index+1,size,m,cnt+1,res*val[index]);  
     fun(val,index+1,size,m,cnt,res);  
 }  

和最大子序列  

 #include&lt;stdio.h&gt;  
 int a[100001];  
 int main()  
 {  
     int n,i1;  
     scanf("%d",&amp;n);  
     for(i1=0;i1&lt;n;i1++)  
           scanf("%d",&amp;a[i1]);  
     int sum=-100098087;  
     for(i1=1;i1&lt;n;i1++)  
         {<!-- -->if(a[i1-1]&gt;0)  
            a[i1]=a[i1-1]+a[i1];  
            }  
    for(i1=0;i1&lt;n;i1++)  
         if(a[i1]&gt;sum)  
            sum=a[i1];  
    printf("%d\n",sum);  
     return 0;  
 }  

统计单词数  

 #include&lt;stdio.h&gt;  
 #include&lt;string.h&gt;  
 struct ha  
 {<!-- -->   int n;  
     char c[21];  
 }hasi[1000];  
 int main()  
 {  int i1,i2;  
     char a[1500],b[21];  
     gets(a);  
     int o=0,p=0;  
     for(i1=0;a[i1];i1++)  
     {  if(a[i1]&lt;='z'&amp;&amp;a[i1]&gt;='a')  
          a[i1]-='a'-'A';  
     }  
     for(i1=0;a[i1+1];i1++)  
     {  
         if(a[i1]&lt;'A'||a[i1]&gt;'z'||a[i1]&lt;'a'&amp;&amp;a[i1]&gt;'Z')  
         {  b[o]='\0';   
            if(o==0)  
                continue;  
            for(i2=0;i2&lt;p;i2++)  
               {  
                    if(!strcmp(hasi[i2].c,b))  
                    {  hasi[i2].n++;  
                       break;  
                     }  
             }  
             if(i2==p)  
             {  
                 strcpy(hasi[p].c,b);  
                 hasi[p].n=1;  
                 p++;   
               }  
             o=0;  
             continue;  
         }  
         b[o++]=a[i1];  
     }  
       b[o]='\0';   
            for(i2=0;i2&lt;p;i2++)  
               {  
                    if(!strcmp(hasi[i2].c,b))  
                    {  hasi[i2].n++;  
                       break;  
                     }  
             }  
             if(i2==p)  
             {  
                 strcpy(hasi[p].c,b);  
                 hasi[p].n=1;  
                 p++;   
               }  
     for(i1=0;i1&lt;p;i1++)  
       {  
            for(i2=0;hasi[i1].c[i2];i2++)  
                if(hasi[i1].c[i2]&lt;='Z'&amp;&amp;hasi[i1].c[i2]&gt;='A')  
                      printf("%c",hasi[i1].c[i2]);  
                 else   
                     printf("%c",hasi[i1].c[i2]-'a'+'A');  
            printf(":");  
            for(i2=0;i2&lt;hasi[i1].n;i2++)  
               printf("*");  
            printf("%d",hasi[i1].n);  
            printf("\n");  
     }  
     return 0;  
 }  

实数相加  

 #include&lt;stdio.h&gt;  
 int a[101],b[101],c[101],d[101],e[101],f[101];  
 int main()  
 {  char k[1000],l[1001];  
    int i1,i2,a1,b1,c1,d1,e1,f1;  
     gets(k);  
     gets(l);  
     int o=0;  
     for(i1=0;k[i1];i1++)  
      {  
         if(k[i1]=='.')  
            {i1++;  
             break;}  
         a[o++]=k[i1]-'0';  
      }  
      a1=o;  
      o=0;  
      for(;k[i1];i1++)  
      {  
         b[o++]=k[i1]-'0';  
      }  
      b1=o;  
      o=0;  
     for(i1=0;l[i1];i1++)  
      {  
         if(l[i1]=='.')  
            {i1++;  
             break;}  
         c[o++]=l[i1]-'0';  
      }  
      c1=o;  
       o=0;  
      for(;l[i1];i1++)  
      {  
         d[o++]=l[i1]-'0';  
      }  
      d1=o;  
      o=0;  
      int jiwei=0;  
      for(i1=b1-1,i2=d1-1;i1&gt;=0||i2&gt;=0;)  
      {  
         if(i1==i2)  
          {  
             f[o]=(b[i1]+d[i2]+jiwei)%10;  
             jiwei=(b[i1]+d[i2]+jiwei)/10;  
             o++;i1--;i2--;  
          }  
          else if(i1&gt;i2)  
          {  f[o]=(b[i1]+jiwei)%10;  
             jiwei=(b[i1]+jiwei)/10;  
             o++;i1--;  
          }  
          else   
          {  
             f[o]=(d[i2]+jiwei)%10;  
             jiwei=(d[i2]+jiwei)/10;   
             o++;i2--;  
          }  
      }  
      f1=o;    
      o=0;  
      for(i1=a1-1,i2=c1-1;i1&gt;=0||i2&gt;=0;i1--,i2--)  
      {    
         if(i1&lt;0)  
         {  e[o]=(c[i2]+jiwei)%10;  
            jiwei=(c[i2]+jiwei)/10;  
             o++;  
          }  
          else if(i2&lt;0)  
          {e[o]=(a[i1]+jiwei)%10;  
            jiwei=(a[i1]+jiwei)/10;  
             o++;  
         }  
         else   
           {e[o]=(a[i1]+c[i2]+jiwei)%10;  
            jiwei=(a[i1]+c[i2]+jiwei)/10;  
             o++;  
          }  
      }  
      if(jiwei==1)  
         e[o++]=1;  
      for(i1=o-1;i1&gt;=0;i1--)  
          printf("%d",e[i1]);  
        if(b1==0&amp;&amp;d1==0)  
           return 0;  
       printf(".");  
      for(i1=f1-1;i1&gt;=0;i1--)  
          printf("%d",f[i1]);   
       return 0;  
 }  

项链  

 #include&lt;stdio.h&gt;  
 #include&lt;string.h&gt;  
 int main()  
 {     
     char a[1000];  
     int i1,i2;  
     gets(a);  
     int max=0,n=strlen(a);  
     int total=0;  
     for(i1=0;a[i1];i1++)  
     {       
          char p='w';  
          total=0;  
          for(i2=i1;;i2++)  
           {   if(i2&gt;=n)  
                   i2-=n;  
              if(p=='w'||a[i2]==p||a[i2]=='w')  
                {  
                     if(a[i2]!='w')  
                         p=a[i2];  
                     total++;  
                }  
              else  
                   break;  
             if(total&gt;=n)  
                break;     
           }  
           p='w';  
          for(i2=i1-1;;i2--)  
          {   if(total&gt;=n)  
                   break;  
               if(i2&lt;0)  
                  i2+=n;  
               if(p=='w'||a[i2]==p||a[i2]=='w')  
                  {    if(a[i2]!='w')  
                      p=a[i2];  
                      total++;  
                   }  
               else  
                   break;  
          }   
           if(total&gt;max)  
               max=total;  
     }  
      printf("%d\n",max);  
     return 0;  
 }  

交换Easy 

 #include &lt;stdio.h&gt;  
 int main()  
 {  
     int n,m,ary[1000],temp,op1,op2;  
     scanf("%d %d",&amp;n,&amp;m);  
     int i;  
     for(i=0;i&lt;n;i++)  
     {  
         scanf(" %d",&amp;ary[i]);  
     }  
     for(i=0;i&lt;m;i++)  
     {  
         scanf(" %d %d",&amp;op1,&amp;op2);  
         if(op1 != op2)  
         {  
             temp=ary[op1-1];  
             ary[op1-1]=ary[op2-1];  
             ary[op2-1]=temp;  
         }  
     }  
     for(i=0;i&lt;n;i++)  
     {  
         printf("%d\n",ary[i]);  
     }  
 }  

文章精选

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

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

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

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


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