NOIP2008普及組題解

2021-07-11 06:03:02 字數 4518 閱讀 2567

noip2008普及組題解

從我在其他站的部落格直接搬過來的

posted @ 2016-04-16 01:11

t1 isbn號碼

每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字、1位識別碼和3位分隔符, 其規定格式如「x-***-***xx-x」,其中符號「-」就是分隔符(鍵盤上的減號),最後一位是識別碼,例如0-670-82162-4就是乙個標 準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如0代表英語;第乙個分隔符「-」之後的三位數字代表出版社,例如670代表維京出版社;第 二個分隔符後的五位數字代表該書在該出版社的編號;最後一位為識別碼。

識別碼的計算方法如下:

首位數字乘以1加上次位數字乘以2……以此類推,用所得的結果mod 11,所得的餘數即為識別碼,如果餘數為10,則識別碼為大寫字母x。例如isbn號碼0-670-82162-4中的識別碼4是這樣得到的:對 067082162這9個數字,從左至右,分別乘以1,2,...,9,再求和,即0×1+6×2+……+2×9=158,然後取158 mod 11的結果4作為識別碼。

你的任務是編寫程式判斷輸入的isbn號碼中識別碼是否正確,如果正確,則僅輸出「right」;如果錯誤,則輸出你認為是正確的isbn號碼。

輸入格式:

輸入檔案isbn.in只有一行,是乙個字串行,表示一本書的isbn號碼(保證輸入符合isbn號碼的格式要求)。

輸出格式:

輸出檔案isbn.out共一行,假如輸入的isbn號碼的識別碼正確,那麼輸出「right」,否則,按照規定的格式,輸出正確的isbn號碼(包括分隔符「-」)。

輸入樣例#1:

【輸入樣例1】

0-670-82162-4

【輸入樣例2】

0-670-82162-0

輸出樣例#1:

【輸出樣例1】

right

【輸出樣例2】

0-670-82162-4

2008普及組第一題

#include#includeusing namespace std;

int main();

struct td x[1200],y[2100];

int cmp(td a,td b)

int rex[1200],rey[2100];

int m,n,k,l,d;

int main()

if(x1!=x2)

}sort(x+1,x+m+1,cmp);

sort(y+1,y+n+1,cmp);

for(i=1;i<=k && i<=m;i++)

for(i=1;i<=l && i<=n;i++)

sort(rex+1,rex+k+1);

sort(rey+1,rey+l+1);

for(i=1;i<=k;i++)printf("%d ",rex[i]);

cout兩次排序,一次排能隔開的數量,一次排id

看發帖時間就知道我為何不想多解釋

t3上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。

遊戲規則是這樣的:n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個(左右任意),當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出去的那個同學就是敗者,要給大家表演乙個節目。

聰明的小蠻提出乙個有趣的問題:有多少種不同的傳球方法可以使得從小蠻手裡開始傳的球,傳了m次以後,又回到小蠻手裡。兩種傳球方法被視作不同的方 法,當且僅當這兩種方法中,接到球的同學按接球順序組成的序列是不同的。比如有三個同學1號、2號、3號,並假設小蠻為1號,球傳了3次回到小蠻手裡的方 式有1->2->3->1和1->3->2->1,共2種。

輸入格式:

輸入檔案ball.in共一行,有兩個用空格隔開的整數n,m(3<=n<=30,1<=m<=30)。

輸出格式:

輸出檔案ball.out共一行,有乙個整數,表示符合題意的方法數。

輸入樣例#1:

3 3

輸出樣例#1:

2
40%的資料滿足:3<=n<=30,1<=m<=20

100%的資料滿足:3<=n<=30,1<=m<=30

2008普及組第三題

#include#include#include#includeusing namespace std;

int n;

int f[200][200];//[第i次][第j個人]

int t;

int main()

printf("%d",f[t][1]);

return 0;

}

動規,f[次數][人員]

每次可以從左邊的人或右邊的人手裡接到球,所以方案數是左右相加

注意鏈變環

t4 立體圖

小淵是個聰明的孩子,他經常會給周圍的小朋友們將寫自己認為有趣的內容。最近,他準備給小朋友們講解立體圖,請你幫他畫出立體圖。

小淵有一塊面積為m*n的矩形區域,上面有m*n個邊長為1的格仔,每個格仔上堆了一些同樣大小的積木(積木的長寬高都是1),小淵想請你列印出這些格仔的立體圖。我們定義每個積木為如下格式,並且不會做任何翻轉旋轉,只會嚴格以這一種形式擺放:

每個頂點用1個加號』+』表示,長用3個」-」表示,寬用1個」/」,高用兩個」|」表示。字元』+』,」-」,」/」,」|」的ascii碼分別 為43,45,47,124。字元』.』(ascii碼46)需要作為背景輸出,即立體圖裡的空白部分需要用』.』來代替。立體圖的畫法如下面的規則:

若兩塊積木左右相鄰,圖示為:

若兩塊積木上下相鄰,圖示為:

若兩塊積木前後相鄰,圖示為:

立體圖中,定義位於第(m,1)的格仔(即第m行第1列的格仔)上面自底向上的第一塊積木(即最下面的一塊積木)的左下角頂點為整張圖最左下角的點。

輸入格式:

輸入檔案drawing.in第一行有用空格隔開的2個整數m和n,表示有m*n個格仔(1<=m,n<=50)。

接下來的m行,是乙個m*n的矩陣,每行有n個用空格隔開的整數,其中第i行第j列上的整數表示第i行第j列的個子上摞有多少個積木(1<=每個格仔上的積木數<=100)。

輸出格式:

輸出檔案drawing.out中包含題目要求的立體圖,是乙個k行l列的字串矩陣,其中k和l表示最少需要k行l列才能按規定輸出立體圖。

輸入樣例#1:

3 4

2 2 1 2

2 2 1 1

3 2 1 2

輸出樣例#1:

......+---+---+...+---+

..+---+ / /|../ /|

./ /|-+---+ |.+---+ |

+---+ |/ /| +-| | +

| | +---+ |/+---+ |/|

| |/ /| +/ /|-+ |

+---+---+ |/+---+ |/| +

| | | +-| | + |/.

| | |/ | |-| +..

+---+---+---+---+ |/...

| | | | | +....

| | | | |/.....

+---+---+---+---+......

noip2008普及組第四題

本質上還是模擬,但是算座標讓題目複雜度上了一級

不習慣夜戰的我算錯了好幾次……

/*silvern 2008普及組t4立體圖*/

#include#include#include#include#includeusing namespace std;

char c[7][8]=;

char map[2000][2000];

int d[2000][2000];

int k,l;

void draw(int x,int y)

return;

}int main()

l=4*n+2*m+1;//4*n是由於矩陣寬而多需要的寬度,2*m+1是因為積木前後層數而需要的高度

for(i=1;i<=k;i++)

for(j=1;j<=l;j++)

map[i][j]='.';//先鋪好點

for(i=1;i<=m;i++)//從後往前

for(j=1;j<=n;j++)//從左往右

for(int g=0;g解釋都在注釋裡了

那個用char組表示立體圖的方法是和別的大神學的

很帥對吧

NOIP2008普及組 排座椅

問題描述 上課的時候總有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的d對同學上課時會交頭接耳。同學們在教室中坐成了m行n列,坐在第i行第j列的同學的位置是 i,j 為了方便同學們進出,在教室中設定了k...

NOIP2008 普及組 ISBN 號碼

題目鏈結 題目描述 每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識別碼和3位分隔符,其規定格式如x xx x,其中符號 就是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如0...

NOIP2008提高組題解

考察知識 字串,素數判定 演算法難度 x 實現難度 x 分析 直接輸入後安裝要求計算就可以了。includebool isprime int n 考察知識 列舉 演算法難度 xx 實現難度 xx 分析 我們先預處理數字在1.999 因為四位數最少火柴1111,有8根,3個數字就會超過24根 的所有整...