當前位置:首頁 » 編程語言 » 信息學奧賽試題c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

信息學奧賽試題c語言

發布時間: 2022-02-10 03:20:10

㈠ 信息學奧林匹克競賽(c語言)輔導資料和計算機基礎知識資料

http://program.xuntan.com/index.php?boardid=2&page=1
有大量的C NOIp資料
(免費的,不過需要注冊)
例如這里:http://program.xuntan.com/dispbbs.php?boardid=2&id=148&star=1&page=1

㈡ 求第十四屆信息學奧賽聯賽普及組c語言初賽試題 第三大題第4題解析 詳細點

知道前序遍歷和中序遍歷,求後序遍歷,這就是程序的目的

㈢ 第十九屆全國青少年信息學奧林匹克聯賽普及組C語言試題 答案

㈣ 懸賞10分,C語言的高手嗎第十一屆全國青少年信息學奧賽程序題第四題,有誰知道怎麼做嗎

慢慢跟蹤就是了

main()
{long x,x2;
printf("Input a number:\n");
scanf("%ld",&x);
x2=1;
while(x2<x) //進入循環 一直到x2=10000000
x2*=10;
x2/=10; //然後x2=1000000
digit(x,x2);
printf("\n");
}
下面就進入遞歸了
取余得到6254379
到這里 要注意
if(m>1)
digit(n/10,m/10);
printf("%2ld",n%10);

其實 語句一直在遞歸里轉圈 在遞歸調用後的print語句一值沒有用 這就要從里到外一次 使用遞歸後的print了
最內層 n%10 =9
倒數第二層為7

然後回來

就是這樣 呵呵

區別很大
digit(n/10,m/10)只是給函數傳參數n/10與m/10
digit(n=n/10,m=m/10)是 先吧n變成n/10,這里n的值變了 上面沒有變

㈤ 誰有2007年全國信息學奧賽的初賽試題(C語言)

NOIP2007 初賽試題(提高組C)
&; 中國計算機學會2007
1
第十三屆全國青少年信息學奧林匹克聯賽初賽試題
( 提高組C 語言二小時完成)
● ● 全部試題答案均要求寫在答卷紙上,寫在試卷紙上一律無效●●
一、單項選擇題(共10 題,每題1.5 分,共計15 分。每題有且僅有一個正確答案)。
1. 在以下各項中,( )不是CPU 的組成部分。
A. 控制器B. 運算器C. 寄存器D. 主板E. 算術邏輯單元(ALU)
2.在關系資料庫中,存放在資料庫中的數據的邏輯結構以( )為主。
A. 二叉樹B. 多叉樹C.哈希表D. B+樹E.二維表
3.在下列各項中,只有( )不是計算機存儲容量的常用單位。
A. Byte B. KB C.MB D.UB E.TB
4.ASCII 碼的含義是( )。
A. 二—十進制轉換碼B. 美國信息交換標准代碼C. 數字的二進制編碼
D. 計算機可處理字元的唯一編碼E. 常用字元的二進制編碼
5.在C 語言中,表達式23|2^5 的值是( )
A. 23 B. 1 C.18 D.32 E.24
6.在C 語言中,判斷a 等於0 或b 等於0 或c 等於0 的正確的條件表達式是( )
A. !((a!=0)||(b!=0)||(c!=0))
B. !((a!=0)&&(b!=0)&&(c!=0))
C. !(a==0&&b==0)||(c!=0)
D. (a=0)&&(b=0)&&(c=0)
E. !((a=0)||(b=0)||(c=0))
7.地面上有標號為A、B、C 的3 根細柱,在A 柱上放有10 個直徑相同中間有孔的圓盤,從上到下依
次編號為1,2,3,……,將A 柱上的部分盤子經過B 柱移入C 柱,也可以在B 柱上暫存。如果B 柱
上的操作記錄為:「進,進,出,進,進,出,出,進,進,出,進,出,出」。那麼,在C 柱上,從下
到上的盤子的編號為( )。
A. 2 4 3 6 5 7 B. 2 4 1 2 5 7 C. 2 4 3 1 7 6
D. 2 4 3 6 7 5 E. 2 1 4 3 7 5

8. 與十進制數17.5625 對應的8 進制數是( )。
A. 21.5625 B. 21.44 C. 21.73
D. 21.731 E. 前4 個答案都不對
9.歐拉圖G 是指可以構成一個閉迴路的圖,且圖G 的每一條邊恰好在這個閉迴路上出現一次(即一筆
畫成)。在以下各個描述中,不一定是歐拉圖的是( )。
A. 圖G 中沒有度為奇數的頂點
B. 包含歐拉環游的圖(歐拉環游是指通過圖中每邊恰好一次的閉路徑)
C. 包含歐拉閉跡的圖(歐拉跡是指通過圖中每邊恰好一次的路徑)
D. 存在一條迴路,通過每個頂點恰好一次
E. 本身為閉跡的圖
10. 一個無法靠自身的控制終止的循環稱為「死循環」,例如,在C 語言程序中,語句「while(1)
printf(「*」);」就是一個死循環,運行時它將無休止地列印*號。下面關於死循環的說法中,只有( )
是正確的。
A. 不存在一種演算法,對任何一個程序及相應的輸入數據,都可以判斷是否會出現死循環,因而,
任何編譯系統都不做死循環檢驗
B.有些編譯系統可以檢測出死循環
C. 死循環屬於語法錯誤,既然編譯系統能檢查各種語法錯誤,當然也應該能檢查出死循環
D. 死循環與多進程中出現的「死鎖」差不多,而死鎖是可以檢測的,因而,死循環也是可以檢測

E. 對於死循環,只能等到發生時做現場處理,沒有什麼更積極的手段
二、不定項選擇題(共10 題,每題1.5 分,共計15 分。每題正確答案的個數大於或等於1。多選
或少選均不得分)。
11. 設A=B=true,C=D=false,以下邏輯運算表達式值為真的有( )。
A. (¬ A∧B)∨(C∧D∨A) B. ¬ (((A∧B)∨C)∧D)
C. A∧(B∨C∨D)∨D D. (A∧(D∨C)) ∧B
12. 命題「P→Q」可讀做P蘊涵Q,其中P、Q 是兩個獨立的命題。只有當命題P成立而命題Q不成立時,
命題「P→Q」的值為false,其他情況均為true。與命題「P→Q」等價的邏輯關系式是( )。
A. ¬ P∨Q B. P∧Q C. ¬ (P∨Q) D. ¬ (¬ Q∧P)
13. (2070)16 + (34)8 的結果是( )。
A. (8332)10 B. (208C)16
C. (100000000110)2 D. (20214)8

14. 已知7 個結點的二叉樹的先根遍歷是1 2 4 5 6 3 7(數字為結點的編號,以下同),後根遍歷
是4 6 5 2 7 3 1,則該二叉樹的可能的中根遍歷是( )
A. 4 2 6 5 1 7 3 B. 4 2 5 6 1 3 7
C. 4 2 3 1 5 4 7 D. 4 2 5 6 1 7 3
15. 冗餘數據是指可以由其他數據導出的數據,例如,資料庫中已存放了學生的數學、語文和英語的三
科成績,如果還存放三科成績的總分,則總分就可以看作冗餘數據。冗餘數據往往會造成數據的不一致,
例如,上面4 個數據如果都是輸入的,由於操作錯誤使總分不等於三科成績之和,就會產生矛盾。下面
關於冗餘數據的說法中,正確的是( )。
A. 應該在資料庫中消除一切冗餘數據
B. 與用高級語言編寫的數據處理系統相比,用關系資料庫編寫的系統更容易消除冗餘數據
C. 為了提高查詢效率,在資料庫中可以適當保留一些冗餘數據,但更新時要做相容性檢驗
D. 做相容性檢驗會降低效率,可以不理睬資料庫中的冗餘數據
16.在下列各軟體中,屬於NOIP 競賽(復賽)推薦使用的語言環境有( )。
A. gcc B. g++
C. Turbo C D. free pascal
17. 以下斷電之後仍能保存數據的有( )。
A. 硬碟B. ROM C. 顯存D. RAM
18. 在下列關於計算機語言的說法中,正確的有( )。
A. 高級語言比匯編語言更高級,是因為它的程序的運行效率更高
B. 隨著Pascal、C等高級語言的出現,機器語言和匯編語言已經退出了歷史舞台
C. 高級語言程序比匯編語言程序更容易從一種計算機移植到另一種計算機上
D. C是一種面向過程的高級計算機語言
19. 在下列關於演算法復雜性的說法中,正確的有( )。
A. 演算法的時間復雜度,是指它在某台計算機上具體實現時的運行時間
B. 演算法的時間復雜度,是指對於該演算法的一種或幾種主要的運算,運算的次數與問題的規模之間的函
數關系
C. 一個問題如果是NPC類的,就意味著在解決該問題時,不存在一個具有多項式時間復雜度的演算法。
但這一點還沒有得到理論上的證實,也沒有被否定
D. 一個問題如果是NP類的,與C有相同的結論
20. 近20年來,許多計算機專家都大力推崇遞歸演算法,認為它是解決較復雜問題的強有力的工具。在下
列關於遞歸演算法的說法中,正確的是( )。
A. 在1977年前後形成標準的計算機高級語言「FORTRAN77」禁止在程序使用遞歸,原因之一是該方
法可能會佔用更多的內存空間
B. 和非遞歸演算法相比,解決同一個問題,遞歸演算法一般運行得更快一些
C. 對於較復雜的問題,用遞歸方式編程往往比非遞歸方式更容易一些
D. 對於已經定義好的標准數學函數sin(x),應用程序中的語句「y=sin(sin(x));」就是一種遞
歸調用
三.問題求解(共2 題,每題5 分,共計10 分)
1.給定n 個有標號的球,標號依次為1,2,…,n。將這n 個球放入r 個相同的盒子里,不允許
有空盒,其不同放置方法的總數記為S(n,r)。例如,S(4,2)=7,這7 種不同的放置方法依次為
{(1),(234)}, {(2),(134)}, {(3),(124)}, {(4),(123)}, {(12),(34)}, {(13),(24)},
{(14),(23)}。當n=7,r=4 時,S(7,4)= _____________。
2.N 個人在操場里圍成一圈,將這N 個人按順時針方向從1 到N 編號,然後,從第一個人起,每
隔一個人讓下一個人離開操場,顯然,第一輪過後,具有偶數編號的人都離開了操場。依次做下去,直
到操場只剩下一個人,記這個人的編號為J(N) ,例如,J(5)=3 ,J(10)=5 ,等等。則
J(400)=______________。
(提示:對N=2m+r 進行分析,其中0≤r<2m )。
四.閱讀程序寫結果(共4 題,每題8 分,共計32 分)
1.#include <stdio.h>
int main()
{int i,p[5],q[5],x,y=20;
for(i=0;i<=4;i++)
scanf("%d", &p[i]);
q[0]=(p[0]+p[1])+(p[2]+p[3]+p[4])/7;
q[1]=p[0]+p[1]/((p[2]+p[3])/p[4]);
q[2]=p[0]*p[1]/p[2];
q[3]=q[0]*q[1];
q[4]=q[1]+q[2]+q[3];
x=(q[0]+q[4]+2)-p[(q[3]+3)%4];
if(x>10)
y+= (q[1]*100-q[3])/(p[p[4]%3]*5);
else
y+=20+(q[2]*100-q[3])/(p[p[4]%3]*5);
printf("%d,%d\n", x,y);
return 0;

}
/*註:本例中,給定的輸入數據可以避免分母為0 或數組元素下標越界。*/
輸入:6 6 5 5 3
輸出:_______________
2.#include <stdio.h>
void fun(int *a,int *b)
{int *k;
k=a; a=b; b=k;
}
main( )
{int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("No.1: %d,%d ",a,b);
fun(&a,&b);
printf("No.2: %d,%d\n",a,b);
}
輸出:____________________
3.#include "math.h"
#include "stdio.h"
main()
{int a1[51]={0};
int i,j,t,t2,n=50;
for (i=2;i<=sqrt(n);i++)
if(a1[i]==0)
{t2=n/i;
for(j=2;j<=t2;j++) a1[i*j]=1;
}
t=0;
for (i=2;i<=n;i++)
if(a1[i]==0)
{printf("%4d",i); t++;
if(t%10==0) printf("\n");
}
printf("\n");
}

輸出: ________________________________________
________________________________________
4. #include "stdio.h"
char ch[]={'q','A','S','O','R','T','E','X','A','M','P','L','E'};
int n=12;
void shift(int k, int n)
{char v;
int j;
v=ch[k]; j=k+k;
while (j<=n)
{if((j<n) && (ch[j]<ch[j+1])) j++;
if (v<ch[j])
{ ch[j/2]=ch[j]; j*=2; }
else
return;
ch[j/2]=v;
}
}
void hpsrt(void)
{int k;
char tmp;
for (k=n/2; k>0; k--) shift(k,n); /* 建堆*/
printf("No.1: ");
for(k=1; k<=n; k++) putchar(ch[k]);
putchar('\n');
for (k=n; k>0; k--)
{ tmp=ch[1]; ch[1]=ch[k]; ch[k]=tmp;
shift(1,k-1);
}
}
main()
{int k;
hpsrt();
printf("No.2: ");
for(k=1; k<=n; k++) putchar(ch[k]);
putchar('\n');
}

輸出:__________________________________________
___________________________________________
五.完善程序(前5 空,每空2 分,後6 空,每空3 分,共28 分)
1.(格雷碼,Gray Code)
格雷碼是對十進制數的一種二進制編碼。編碼順序與相應的十進制數的大小不一致。其特點是:對於
兩個相鄰的十進制數,對應的兩個格雷碼只有一個二進制位不同。另外,最大數與最小數之間也僅有一個
二進制位不同,以4 位二進制數為例,編碼如下:
十進制數格雷碼十進制數格雷碼
0 0000 8 1100
1 0001 9 1101
2 0011 10 1111
3 0010 11 1110
4 0110 12 1010
5 0111 13 1011
6 0101 14 1001
7 0100 15 1000
如果把每個二進制的位看作一個開關,則將一個數變為相鄰的另一個數,只須改動一個開關。因此,
格雷碼廣泛用於信號處理、數-模轉換等領域。
下面程序的任務是:由鍵盤輸入二進制數的位數n (n<16),再輸入一個十進制數m(0≤m<2n),然
後輸出對應於m 的格雷碼(共n 位,用數組gr[]存放)。
為了將程序補充完整,你必須認真分析上表的規律,特別是對格雷碼固定的某一位,從哪個十進制數
起,由0 變為1,或由1 變為0。
#include <stdio.h>
main()
{int bound=1,m,n,i,j,b,p,gr[15];
printf("input n,m\n");
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) bound= ① ;
if(m<0||m>=bound)
{printf("Data error!\n");
② ;
}
b=1;
for(i=1;i<=n;i++)
{p=0; b=b*2;
for( ③ ;j<=m;j++)
if( ④ )
p=1-p;
gr[i]=p;
}
for(i=n; ⑤ )
printf("%1d",gr[i]); /* 在"%1d" 中出現的是數字1,不是字母l */
printf("\n");
}
2.(連續郵資問題)某國發行了n 種不同面值的郵票,並規定每封信最多允許貼m 張郵票,在這
些約束下,為了能貼出{1,2,3,…,maxvalue}連續整數集合的所有郵資,並使maxvalue 的值最
大,應該如何設計各郵票的面值?例如,當n=5、m=4 時,面值設計為{1,3,11,15,32},可使
maxvalue 達到最大值70(或者說,用這些面值的1 至4 張郵票可以表示不超過70 的所有郵資,但無
法表示郵資71。而用其他面值的1 至4 張郵票如果可以表示不超過k 的所有郵資,必有k≤70)。
下面是用遞歸回溯求解連續郵資問題的程序。數組x[1:n]表示n 種不同的郵票面值,並約定各元
素按下標是嚴格遞增的。數組bestx [1:n]存放使maxvalue 達到最大值的郵票面值(最優解),
數組y[maxl]用於記錄當前已選定的郵票面值x[1:i]能貼出的各種郵資所需的最少郵票張數。請將程
序補充完整。
#include <stdio.h>
#define NN 20
#define maxint 30000
#define maxl 500 /*郵資的最大值*/
int n,m,bestx[NN],x[NN],y[maxl],maxvalue=0;
void result()
{輸出結果:最大值:maxvalue 及最優解: bestx[1:n](略)
}
void backtrace(int i,int r)
{ int j,k,z[maxl];
for(j=0;j<= ① ;j++)
if(y[j]<m)
for(k=1;k<=m-y[j];k++)
if(y[j]+k<=y[ ② ])
y[ ③ ]=y[j]+k;
while(y[r]<maxint) r++;
if(i>n)
{if(r-1>maxvalue)
{maxvalue= ④ ;
for(j=1;j<=n;j++)
bestx[j]=x[j];
}
return;
}
for(k=0;k<maxl;k++)
z[k]=y[k];
for(j= ⑤ ;j<=r;j++)
{x[i]=j;
⑥ ;
for(k=0;k<maxl;k++)
y[k]=z[k];
}
}
void main()
{int j;
printf("input n,m:\n");
scanf(「%d%d」,&n,&m);
for(j=1;j<maxl;j++)
y[j]=maxint;
y[0]=0; x[0]=0; x[1]=1;
backtrace(2,1);
result();
}

答案:
一、單項選擇題:(每題1.5分)

1. D 2. E 3. D 4. B 5. A

6. B 7. D 8. B 9. D 10. A

二、 不定項選擇題 (共10題,每題1.5分,共計15分。每題正確答案的個數大於或等於1。多選或少選均不得分)。

11. ABC 12. AD 13. ABD 14. ABD 15. BC

16. ABD 17. AB 18. CD 19. BC 20. AC

三、問題求解:(共2題,每題5分,共計10分)

1.350

2.289

四、閱讀程序寫結果(共4題,每題8分,共計32分)

1 129,43

2 No.1:3,6 No.2:3,6

3 2 3 5 7 11 13 17 19 23 29

31 37 41 43 47

4 No.1: XTORSEAAMPLE

No.2: AAEELMOPRSTX

五.完善程序 (前5空,每空2分,後6空,每空3分,共28分)

(說明:以下各程序填空可能還有一些等價的寫法,各省可請本省專家審定和上機驗證,不一定上報科學委員會審查)

1 ① bound*2

② return

③ j=0

④ (j % b-(b / 2))=0

⑤ <= 1

2 ① x[i-2]*(m-1)

② j+x[i-1]*k

③ j+x[i-1]*k (同2)

④ r-1

⑤ x[i-1]+1

⑥ backtrace(i+1,r)

㈥ 信息學奧賽C語言適合學C99和C11哪個標准

c是什麼時候都有用的,包括進了大學玩acm;pascal進了大學之後再也沒用過。
信息學奧賽兩者都能用,你學過肯定知道奧賽題不會在語法方面難為你。。。
客觀評價c更方便,完全是因為他的編譯器更完善,報錯准點。。。

㈦ 求第十四屆信息學奧賽聯賽普及組c語言初賽試題 第三大題第2,3題的解析

2,3,1
遞歸一次,輸入參數循環左移至第一個數小於等於第二個數然後輸出
5 4 10 1 6 22 -59 -16 -11 -6
將數組中正數與負數分開排列,從數組起始開始檢測非整數數,從數組末尾檢測非負數,然後將這兩個數調換位置
最後一個遞歸沒時間分析了,下午有事要出門了

㈧ 第十五屆信息學奧賽聯賽普及組C語言初賽試題及答案

這個東西好找么?

㈨ 誰有歷屆全國青少年信息學奧賽試題(初賽C語言)

我也是10月20日去參賽NOIP的啊,去在
www.noi.cn
仔細找,有答案有題目

㈩ 信息學奧賽C語言(不是C++)用的什麼程序, 順便發個下載地址來

用 tc