藍橋杯線上測試的題解

來源:互聯網
上載者:User

新手推薦,藍橋杯線上測試的題目。不定時不斷更新中,沒按順序做。無聊的時候來切幾題。

http://lx.lanqiao.org/index.page

Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。
當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。

#include<cstdio>const int mod=10007;const int MAXN=1000000+10;int ans[MAXN];int main(){    ans[1]=ans[2]=1;    int n;    scanf("%d",&n);    for(int i=3;i<=n;i++)        ans[i]=(ans[i-1]+ans[i-2])%mod;    printf("%d\n",ans[n]);    return 0;}

給定圓的半徑r,求圓的面積。

#include<cstdio>#include<cmath>const double pi=acos(-1.0);int main(){double r;scanf("%lf",&r);printf("%.7lf\n",pi*r*r);return 0;}

求1+2+3+...+n的值。


#include<cstdio>int main(){__int64 n;scanf("%I64d",&n);__int64 ans=(1+n)*n >>1;printf("%I64d\n",ans);return 0;}

算a+b

#include <cstdio> int main(){    int a, b;    scanf("%d%d", &a, &b);    printf("%d", a+b);    return 0;}


排序

#include <cstdio>#include<algorithm>using namespace std;const int MAXN=200+10;int a[MAXN];int main(){    int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);printf("%d",a[0]);for(int i=1;i<n;i++)printf(" %d",a[i]);printf("\n");    return 0;}


給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。

#include <cstdio>const int MAXN=10000+10;int x[MAXN];int main(){int n,a;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&x[i]);scanf("%d",&a);int ans=-1;for(int i=1;i<=n;i++)if(x[i]==a){ans=i;break;}printf("%d\n",ans);return 0;}



閏年判斷

#include <cstdio>int main(){   int n;   scanf("%d",&n);   if(n %4==0 && n%100!=0 || n%400==0)   printf("yes\n");   else   printf("no\n");    return 0;}


給定n個十六進位正整數,輸出它們對應的八位元。

思路:先將十六進位轉為4位2進位,然後八進位可以從2進位的每3位得到。

#include<cstdio>#include<cstring>const int MAXN=100000;char s[MAXN];char two[MAXN*4];int eight[MAXN*4];int main(){int T;scanf("%d",&T);while(T--){scanf("%s",s);int n=strlen(s),len=0;for(int i=0;i<n;i++){switch(s[i]){case '0':sprintf(two+len,"%s","0000");break;case '1':sprintf(two+len,"%s","0001");break;case '2':sprintf(two+len,"%s","0010");break;case '3':sprintf(two+len,"%s","0011");break;case '4':sprintf(two+len,"%s","0100");break;case '5':sprintf(two+len,"%s","0101");break;case '6':sprintf(two+len,"%s","0110");break;case '7':sprintf(two+len,"%s","0111");break;case '8':sprintf(two+len,"%s","1000");break;case '9':sprintf(two+len,"%s","1001");break;case 'A':sprintf(two+len,"%s","1010");break;case 'B':sprintf(two+len,"%s","1011");break;case 'C':sprintf(two+len,"%s","1100");break;case 'D':sprintf(two+len,"%s","1101");break;case 'E':sprintf(two+len,"%s","1110");break;case 'F':sprintf(two+len,"%s","1111");break;}len+=4;}//for(int i=0;i<len;i+=4)//printf("%c%c%c%c ",two[i],two[i+1],two[i+2],two[i+3]);int i=len-1,len2=0;for(i=len-1;i>=2;i-=3){eight[len2++]= two[i]-'0'+(two[i-1]-'0')*2+(two[i-2]-'0')*4;}if(i==2)eight[len2++]= two[i]-'0'+(two[i-1]-'0')*2+(two[i-2]-'0')*4;else if(i==1)eight[len2++]= two[i]-'0'+(two[i-1]-'0')*2;else if(i==0)eight[len2++]= two[i]-'0';i=len2-1;while(eight[i]==0)i--;for(;i>=0;i--)printf("%d",eight[i]);printf("\n");}return 0;}


從鍵盤輸入一個不超過8位的正的十六進位數字串,將它轉換為正的十進位數後輸出。

  註:十六進位數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。

思路:按權展開,注意範圍 8個F的時候int越界。

#include<cstdio>#include<cstring>const int MAXN=10;char s[MAXN];int main(){while(~scanf("%s",s)){int n=strlen(s);__int64 ans=0,p=16;for(int i=0;i<n;i++){if(s[i]>='0' && s[i]<='9')ans=ans*p+(s[i]-'0');elseans=ans*p+(s[i]-'A'+10);}printf("%I64d\n",ans);}return 0;}

123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
  輸入一個正整數n, 編程求所有這樣的五位和六位十進位數,滿足各位元字之和等於n 。

#include<cstdio>#include<cstring>char s[10];int main(){int n;scanf("%d",&n);for(int i=10000;i<1000000;i++){sprintf(s,"%d",i);int len=strlen(s);bool ok=true;for(int k=0;k<3;k++)if(s[k]!=s[len-k-1])ok=false;if(ok){int sum=0;for(int k=0;k<len;k++)sum+=s[k]-'0';if(sum==n)printf("%s\n",s);}}return 0;}



1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進位數。


#include<cstdio>#include<cstring>char s[10];int main(){for(int i=1000;i<10000;i++){sprintf(s,"%d",i);int len=strlen(s);bool ok=true;for(int k=0;k<3;k++)if(s[k]!=s[len-k-1])ok=false;if(ok){printf("%s\n",s);}}return 0;}



153是一個非常特殊的數,它等於它的每位元字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進位數

#include<cstdio>#include<cstring>char s[10];int main(){for(int i=100;i<1000;i++){sprintf(s,"%d",i);int sum=0;for(int k=0;k<3;k++){int x=s[k]-'0';sum+=x*x*x;}if(sum==i)printf("%d\n",i);}return 0;}

給出n個數,找出這n個數的最大值,最小值,和。

PS:題目的範例錯了。和為11

#include<cstdio>const int INF=10000+10;int main(){int n,min=INF,max=-INF,sum=0,temp;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&temp);sum+=temp;if(max <temp)max=temp;if(min >temp)min=temp;}printf("%d\n%d\n%d\n",max,min,sum);return 0;}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.