【良心出品】第五屆藍(lán)橋杯基礎(chǔ)訓(xùn)練題1_第1頁(yè)
【良心出品】第五屆藍(lán)橋杯基礎(chǔ)訓(xùn)練題1_第2頁(yè)
【良心出品】第五屆藍(lán)橋杯基礎(chǔ)訓(xùn)練題1_第3頁(yè)
【良心出品】第五屆藍(lán)橋杯基礎(chǔ)訓(xùn)練題1_第4頁(yè)
【良心出品】第五屆藍(lán)橋杯基礎(chǔ)訓(xùn)練題1_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五屆藍(lán)橋杯基礎(chǔ)訓(xùn)練題1.問(wèn)題描述Fibonacci數(shù)列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。當(dāng)n比較大時(shí),F(xiàn)n也非常大,現(xiàn)在我們想知道,F(xiàn)n除以10007的余數(shù)是多少。輸入格式輸入包含一個(gè)整數(shù)n。輸出格式輸出一行,包含一個(gè)整數(shù),表示Fn除以10007的余數(shù)。說(shuō)明:在本題中,答案是要求Fn除以10007的余數(shù),因此我們只要能算出這個(gè)余數(shù)即可,而不需要先計(jì)算出Fn的準(zhǔn)確值,再將計(jì)算的結(jié)果除以10007取余數(shù),直接計(jì)算余數(shù)往往比先算出原數(shù)再取余簡(jiǎn)單。樣例輸入10樣例輸出55樣例輸入22樣例輸出7704數(shù)據(jù)規(guī)模與約定1<=n<=1,000,000。#include

<stdlib.h>#include

<stdio.h>#define

MOD

10007#define

MAXN

1000001int

n,

i,

F[MAXN];int

main(){

scanf("%d",

&n);

F[1]

=

1;

F[2]

=

1;

for

(i

=

3;

i

<=

n;

++i)

F[i]

=

(F[i-1]

+

F[i-2])

%

MOD;

printf("%d\n",

F[n]);

return

0;}2.問(wèn)題描述給定一個(gè)長(zhǎng)度為n的數(shù)列,將這個(gè)數(shù)列按從小到大的順序排列。1<=n<=200輸入格式第一行為一個(gè)整數(shù)n。

第二行包含n個(gè)整數(shù),為待排序的數(shù),每個(gè)整數(shù)的絕對(duì)值小于10000。輸出格式輸出一行,按從小到大的順序輸出排序后的數(shù)列。樣例輸入5

83649樣例輸出34689#include

<stdio.h>#include

<stdlib.h>void

Print(int

*data,int

n){

int

i;

for(i=0;i<n;i++)

{

printf("%d

",data[i]);

}

printf("\n");}int

Split(int

*data,int

pre,int

rear){

int

value=data[pre];

while(pre<rear)

{

while(data[rear]>=value

&&

pre<rear)

rear--;

data[pre]=data[rear];

while(data[pre]<value

&&

pre<rear)

pre++;

data[rear]=data[pre];

}

data[pre]=value;

return

pre;}//快速排序void

QuickSort(int

*data,int

pre,int

rear){

if(pre<rear)

{

int

mid=Split(data,pre,rear);

QuickSort(data,pre,mid-1);

QuickSort(data,mid+1,rear);

}}int

main(){

int

i;

int

n;

int

*data;

scanf("%d",&n);

data=(int

*)malloc(sizeof(int)*n);

for(i=0;i<n;i++)

{

scanf("%d",&data[i]);

}

QuickSort(data,0,n-1);

Print(data,n);

return

0;}3.問(wèn)題描述給定n個(gè)十六進(jìn)制正整數(shù),輸出它們對(duì)應(yīng)的八進(jìn)制數(shù)。輸入格式輸入的第一行為一個(gè)正整數(shù)n(1<=n<=10)。

接下來(lái)n行,每行一個(gè)由0~9、大寫字母A~F組成的字符串,表示要轉(zhuǎn)換的十六進(jìn)制正整數(shù),每個(gè)十六進(jìn)制數(shù)長(zhǎng)度不超過(guò)100000。輸出格式輸出n行,每行為輸入對(duì)應(yīng)的八進(jìn)制正整數(shù)。注意輸入的十六進(jìn)制數(shù)不會(huì)有前導(dǎo)0,比如012A。

輸出的八進(jìn)制數(shù)也不能有前導(dǎo)0。樣例輸入2

39

123ABC樣例輸出71

4435274提示先將十六進(jìn)制數(shù)轉(zhuǎn)換成某進(jìn)制數(shù),再由某進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制。以下是C++的代碼(C的代碼沒寫)#include<iostream>#include<cmath>#include<cstring>using

namespace

std;int

e[16][4];int

f[3];int

a[500000],c[500000],b[200000];char

s[100000];int

main(){

int

n;

cin

>>

n;

for

(int

i

=

0;

i

<=

15;

i

++)

{

int

t

=

i;

for

(int

j

=

1;

j

<=

4;

j

++)

{

e[i

+

1][j]

=

t

%

2;

t

=

t

/

2;

}

}

for

(int

k

=

1;

k

<=

n;

k

++)

{

for

(int

i

=

1;

i

<=

400000;

i

++)

a[i]

=

0;

cin

>>

s;

int

l

=

strlen(s);

for

(int

i

=

0;

i

<

l;

i

++)

{

int

p;

if

(int

(s[i])

<

65)

p

=

int(s[i])

-

int('0');

else

p

=

int(s[i])

-

int('A')

+

10;

for

(int

j

=

1;

j

<=

4;

j

++)

a[4

*

i

+

j]

=

e[p

+

1][5

-

j];

}

l

=

4

*

l;

for

(int

i

=

1;

i

<=

l;

i

++)

c[i]

=

a[i];

for

(int

i

=

1;

i

<=

l;

i

++)

a[i]

=

c[l

-

i

+

1];

int

p

=

(3

-(l

%

3))

%

3;

l

=

l

+

p;

f[1]

=

1;

f[2]

=

2;

f[3]

=

4;

for

(int

i

=

1;

i

<=

l

/

3;

i

++)

{

b[i]

=

0;

for

(int

j

=

1;

j

<=

3;

j

++)

b[i]

=

b[i]

+

a[3

*

i

-

j

+

1]

*

f[4

-

j];

}

if

(b[l

/

3]

==

0)

l

--;

for

(int

i

=

l

/

3;

i

>=

1;

i

--)

cout

<<

b[i];

cout

<<

endl;

}

return

0;}3.問(wèn)題描述從鍵盤輸入一個(gè)不超過(guò)8位的正的十六進(jìn)制數(shù)字符串,將它轉(zhuǎn)換為正的十進(jìn)制數(shù)后輸出。

注:十六進(jìn)制數(shù)中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。樣例輸入FFFF樣例輸出65535#include<stdio.h>#include<string.h>

#include<math.h>int

main(){

double

sum=0,x;

char

a[8];

int

len,i=0;

gets(a);

len=strlen(a);

while(len)

{

if(a[len-1]>='A'&&a[len-1]<='F')

x=(a[len-1]-'7')*pow(16,i++);

else

x=(a[len-1]-'0')*pow(16,i++);

sum+=x;

len--;

}

printf("%.0lf",sum);

return

0;

}4.問(wèn)題描述十六進(jìn)制數(shù)是在程序設(shè)計(jì)時(shí)經(jīng)常要使用到的一種整數(shù)的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個(gè)符號(hào),分別表示十進(jìn)制數(shù)的0至15。十六進(jìn)制的計(jì)數(shù)方法是滿16進(jìn)1,所以十進(jìn)制數(shù)16在十六進(jìn)制中是10,而十進(jìn)制的17在十六進(jìn)制中是11,以此類推,十進(jìn)制的30在十六進(jìn)制中是1E。

給出一個(gè)非負(fù)整數(shù),將它表示成十六進(jìn)制的形式。輸入格式輸入包含一個(gè)非負(fù)整數(shù)a,表示要轉(zhuǎn)換的數(shù)。0<=a<=2147483647輸出格式輸出這個(gè)整數(shù)的16進(jìn)制表示樣例輸入30樣例輸出1E提示:(1)按除16取余倒數(shù)(也可使用格式輸出)。(2)可以使用遞歸來(lái)處理,遞歸參數(shù)為要轉(zhuǎn)換的數(shù)字,如果該數(shù)字大于等于16,則將遞歸處理該數(shù)整除16的值,然后再輸出最后一位。C/C++語(yǔ)言可以使用格式輸出直接輸出轉(zhuǎn)換后的結(jié)果。#include

<stdio.h>#include

<stdlib.h>char

data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//輸出void

Print(char

*num,int

n){

int

i;

for(i=n-1;i>=0;i--)

printf("%c",num[i]);

printf("\0");

printf("\n");}//將十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)int

Transform(char

*num,long

long

value){

int

n=0;

while(value>=16)

{

num[n++]=data[value%16];

value/=16;

}

num[n++]=data[value%16];

return

n;}int

main(){

long

long

value;

char

num[10];

int

n;

scanf("%I64d",&value);

n=Transform(num,value);

Print(num,n);

return

0;}5.問(wèn)題描述123321是一個(gè)非常特殊的數(shù),它從左邊讀和從右邊讀是一樣的。

輸入一個(gè)正整數(shù)n,編程求所有這樣的五位和六位十進(jìn)制數(shù),滿足各位數(shù)字之和等于n。輸入格式輸入一行,包含一個(gè)正整數(shù)n。輸出格式按從小到大的順序輸出滿足條件的整數(shù),每個(gè)整數(shù)占一行。樣例輸入52樣例輸出899998

989989

998899數(shù)據(jù)規(guī)模和約定1<=n<=54。#include<stdio.h>int

main(){

int

a,b,c,d,e,f,n;

long

i;

scanf("%d",&n);

for(i=10000;i<=99999;i++)

{

b=i/10000;

c=i/1000%10;

d=i/100%10;

e=i/10%10;

f=i%10;

if((b==f&&c==e)&&b+c+d+e+f==n)

printf("%ld\n",i);

}

for(i=100000;i<=999999;i++)

{

a=i/100000;

b=i/10000%10;

c=i/1000%10;

d=i/100%10;

e=i/10%10;

f=i%10;

if((a==f&&b==e&&c==d)&&a+b+c+d+e+f==n)

printf("%ld\n",i);

}return

0;}6.問(wèn)題描述1221是一個(gè)非常特殊的數(shù),它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進(jìn)制數(shù)。輸出格式按從小到大的順序輸出滿足條件的四位十進(jìn)制數(shù)。#include<stdio.h>int

main(){

int

a,b,c,d,i;

for(i=1000;i<=9999;i++)

{

a=i/1000;

b=i/100%10;

c=i/10%10;

d=i%10;

if(a==d&&b==c)

printf("%d\n",i);

}return

0;}7.問(wèn)題描述153是一個(gè)非常特殊的數(shù),它等于它的每位數(shù)字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進(jìn)制數(shù)。輸出格式按從小到大的順序輸出滿足條件的三位十進(jìn)制數(shù),每個(gè)數(shù)占一行。#include<stdio.h>int

main(){

int

i,j,k,n;

for(n=100;n<1000;n++)

{

i=n/100;

j=n/10%10;

k=n%10;

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

printf("%d\n",n);

}return

0;}8.問(wèn)題描述楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的系數(shù)。它的一個(gè)重要性質(zhì)是:三角形中的每個(gè)數(shù)字等于它兩肩上的數(shù)字相加。下面給出了楊輝三角形的前4行:

1

11

1211331給出n,輸出它的前n行。輸入格式輸入包含一個(gè)數(shù)n。輸出格式輸出楊輝三角形的前n行。每一行從這一行的第一個(gè)數(shù)開始依次輸出,中間使用一個(gè)空格分隔。請(qǐng)不要在前面輸出多余的空格。樣例輸入4樣例輸出1

11

121

1331數(shù)據(jù)規(guī)模與約定1<=n<=34。代碼設(shè)計(jì):#include

<stdio.h>#define

MAXN

40int

n;int

a[MAXN][MAXN];int

main(){

int

i,

j;

scanf("%d",

&n);

a[0][0]

=

1;

for

(i

=

0;

i

<

n;

++i)

{

a[i][0]

=

a[i][i]

=

1;

for

(j

=

1;

j

<

i;

++j)

a[i][j]

=

a[i-1][j-1]

+

a[i-1][j];

}

for

(i

=

0;

i

<

n;

++i)

{

for

(j

=

0;

j

<=

i;

++j)

printf("%d

",

a[i][j]);

printf("\n");

}

return

0;}9.問(wèn)題描述給出一個(gè)包含n個(gè)整數(shù)的數(shù)列,問(wèn)整數(shù)a在數(shù)列中的第一次出現(xiàn)是第幾個(gè)。輸入格式第一行包含一個(gè)整數(shù)n。第二行包含n個(gè)非負(fù)整數(shù),為給定的數(shù)列,數(shù)列中的每個(gè)數(shù)都不大于10000。第三行包含一個(gè)整數(shù)a,為待查找的數(shù)。輸出格式如果a在數(shù)列中出現(xiàn)了,輸出它第一次出現(xiàn)的位置(位置從1開始編號(hào)),否則輸出-1。樣例輸入6

194839

9樣例輸出2數(shù)據(jù)規(guī)模與約定1<=n<=1000。#include

<stdio.h>#define

MAXN

10001int

n,

a,

ans;int

s[MAXN];int

main(){

int

i;

scanf("%d",

&n);

for

(i

=

0;

i

<

n;

++i)

scanf("%d",

&s[i]);

scanf("%d",

&a);

ans

=

-1;

for

(i

=

0;

i

<

n;

++i)

{

if

(s[i]

==

a)

{

ans

=

i

+

1;

break;

}

}

printf("%d",

ans);

return

0;}10.問(wèn)題描述給出n個(gè)數(shù),找出這n個(gè)數(shù)的最大值,最小值,和。輸入格式第一行為整數(shù)n,表示數(shù)的個(gè)數(shù)。第二行有n個(gè)數(shù),為給定的n個(gè)數(shù),每個(gè)數(shù)的絕對(duì)值都小于10000。輸出格式輸出三行,每行一個(gè)整數(shù)。第一行表示這些數(shù)中的最大值,第二行表示這些數(shù)中的最小值,第三行表示這些數(shù)的和。樣例輸入5

13-245樣例輸出5

-2

3數(shù)據(jù)規(guī)模與約定1<=n<=10000。#include

<stdio.h>#include

<stdlib.h>#define

MAXSIZE

10000int

main(){

int

i;

int

n;

int

value;

int

max=-MAXSIZE;

int

min=MAXSIZE;

int

sum=0;

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d",&value);

if(value>max)

max=value;

if(value<min)

min=value;

sum+=value;

}

printf("%d\n",max);

printf("%d\n",min);

printf("%d\n",sum);

return

0;}11.問(wèn)題描述利用字母可以組成一些美麗的圖形,下面給出了一個(gè)例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC這是一個(gè)5行7列的圖形,請(qǐng)找出這個(gè)圖形的規(guī)律,并輸出一個(gè)n行m列的圖形。輸入格式輸入一行,包含兩個(gè)整數(shù)n和m,分別表示你要輸出的圖形的行數(shù)的列數(shù)。輸出格式輸出n行,每個(gè)m個(gè)字符,為你的圖形。樣例輸入57樣例輸出ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC數(shù)據(jù)規(guī)模與約定1<=n,m<=26。#include

<stdio.h>#include

<stdlib.h>#define

MAXSIZE

26//輸出void

Print(char

matrix[MAXSIZE][MAXSIZE],int

n,int

m){

int

i,j;

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

{

printf("%c",matrix[i][j]);

}

printf("\n");

}}//實(shí)現(xiàn)字母圖形void

Drawing(int

n,int

m){

int

i,j;

int

point=0;

char

str;

char

matrix[MAXSIZE][MAXSIZE];

for(i=0;i<n;i++)

{

str='A';

for(j=i;j<m;j++)

{

matrix[i][j]=str++;

}

str='A';

for(j=i-1;j>=0;j--)

{

matrix[i][j]=++str;

}

}

Print(matrix,n,m);}int

main(){

int

n,m;

scanf("%d%d",&n,&m);

Drawing(n,m);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論