sihai的博客

life is always beautiful like sunshine

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

文章推荐

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

题目搜索方式: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))

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<N;i++)  
         if(link[i][0]==x)  
         {  
             y=link[i][1];  
             length[ y ]=length[x]+1>=length[y]?length[x]+1:length[y];  
             fun(y);  
         }  
 }  
 int comp(const void *a, const void *b)  
 {  
     return (*(girl *)a).num>(*(girl *)b).num?1:-1;  
 }  
 int main()  
 {  
     int i,j,T,n,f,x,y,sum=0;  
     girl g[105];  
     scanf("%d",&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",&N);  
         n=0;  
         for(i=0;i<N;i++)  
         {  
             scanf("%s%s",s1,s2);  
             f=0;  
             for(j=0;j<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<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<N;i++)  
             in[link[i][1]]++;  
         for(i=0;i<n;i++)  
             if(in[i]==0)  
                 break;  
         fun(i);  
         for(i=0;i<n;i++)  
         {  
             strcpy(g[i].name,mm[i]);  
             g[i].num=length[i];  
         }  
         qsort(g,n,sizeof(g[0]),comp);  
         for(i=0;i<n;i++)  
         {  
             printf("%s",g[i].name);  
             if(i==n-1)  
                 printf("\n");  
             else  
                 printf(" ");  
         }  
     }  
     return 0;  
 }  

最大乘积

#include<stdio.h>  
 #include<stdlib.h>  
 #include<string.h>  
 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",&x);  
     while(x--)  
     {  
         scanf("%d %d",&n,&m);  
         for(i=0;i<n;i++)  
         {  
             scanf("%d",&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 > max)  
         {  
             max = res;  
         }  
         return ;  
     }  
     if(index>=size)  
     {  
         return ;  
     }  
     fun(val,index+1,size,m,cnt+1,res*val[index]);  
     fun(val,index+1,size,m,cnt,res);  
 }  

和最大子序列

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

统计单词数

 #include<stdio.h>  
 #include<string.h>  
 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]<='z'&&a[i1]>='a')  
          a[i1]-='a'-'A';  
     }  
     for(i1=0;a[i1+1];i1++)  
     {  
         if(a[i1]<'A'||a[i1]>'z'||a[i1]<'a'&&a[i1]>'Z')  
         {  b[o]='\0';   
            if(o==0)  
                continue;  
            for(i2=0;i2<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<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<p;i1++)  
       {  
            for(i2=0;hasi[i1].c[i2];i2++)  
                if(hasi[i1].c[i2]<='Z'&&hasi[i1].c[i2]>='A')  
                      printf("%c",hasi[i1].c[i2]);  
                 else   
                     printf("%c",hasi[i1].c[i2]-'a'+'A');  
            printf(":");  
            for(i2=0;i2<hasi[i1].n;i2++)  
               printf("*");  
            printf("%d",hasi[i1].n);  
            printf("\n");  
     }  
     return 0;  
 }  

实数相加

 #include<stdio.h>  
 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>=0||i2>=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>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>=0||i2>=0;i1--,i2--)  
      {    
         if(i1<0)  
         {  e[o]=(c[i2]+jiwei)%10;  
            jiwei=(c[i2]+jiwei)/10;  
             o++;  
          }  
          else if(i2<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>=0;i1--)  
          printf("%d",e[i1]);  
        if(b1==0&&d1==0)  
           return 0;  
       printf(".");  
      for(i1=f1-1;i1>=0;i1--)  
          printf("%d",f[i1]);   
       return 0;  
 }  

项链

 #include<stdio.h>  
 #include<string.h>  
 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>=n)  
                   i2-=n;  
              if(p=='w'||a[i2]==p||a[i2]=='w')  
                {  
                     if(a[i2]!='w')  
                         p=a[i2];  
                     total++;  
                }  
              else  
                   break;  
             if(total>=n)  
                break;     
           }  
           p='w';  
          for(i2=i1-1;;i2--)  
          {   if(total>=n)  
                   break;  
               if(i2<0)  
                  i2+=n;  
               if(p=='w'||a[i2]==p||a[i2]=='w')  
                  {    if(a[i2]!='w')  
                      p=a[i2];  
                      total++;  
                   }  
               else  
                   break;  
          }   
           if(total>max)  
               max=total;  
     }  
      printf("%d\n",max);  
     return 0;  
 }  

交换Easy

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

文章精选

java等电子图书分享

微信公众号微信公众号

阅读更多
版权声明:本文为本人辛苦原创文章,如果需要转载,请注明出处,谢谢!!! https://blog.csdn.net/sihai12345/article/details/79252167
文章标签: java 蓝桥杯 c-c++
所属专栏: 蓝桥杯竞赛训练习题
想对作者说点什么? 我来说一句

蓝桥杯 练习系统 算法提高Java

2015年05月25日 189KB 下载

蓝桥杯练习题库-4算法提高+VIP题

2018年03月24日 695KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭