isbn信息學(xué)聯(lián)賽試題

    時(shí)間:2022-09-24 10:33:00 試題 我要投稿
    • 相關(guān)推薦

    isbn信息學(xué)聯(lián)賽試題

      1.ISBN號(hào)碼

    isbn信息學(xué)聯(lián)賽試題

      (isbn.pas/c/cpp)

      【問題描述】

      每一本正式出版的圖書都有一個(gè)ISBN號(hào)碼與之對(duì)應(yīng),ISBN碼包括9位數(shù)字、1位識(shí)別碼和3位分隔符,其規(guī)定格式如x-xxx-xxxxx-x,其中符號(hào)-是分隔符(鍵盤上的減號(hào)),最后一位是識(shí)別碼,例如0-670-82162-4就是一個(gè)標(biāo)準(zhǔn)的ISBN碼。ISBN碼的首位數(shù)字表示書籍的出版語(yǔ)言,例如0代表英語(yǔ);第一個(gè)分隔符-之后的三位數(shù)字代表出版社,例如670代表維京出版社;第二個(gè)分隔之后的五位數(shù)字代表該書在該出版社的編號(hào);最后一位數(shù)字為識(shí)別碼。

      識(shí)別碼的計(jì)算方法如下:

      首位數(shù)字乘以1加上次位數(shù)字乘以2以此類推,用所得的結(jié)果mod 11,所得的余數(shù)即為識(shí)別碼,如果余數(shù)為10,則識(shí)別碼為大寫字母X。例如ISBN號(hào)碼0-670-82162-4中的識(shí)別碼4是這樣得到的:對(duì)067082162這9個(gè)數(shù)字,從左到右,分別乘以1,2,,9,再求和,即01+62++29=158,然后取158 mod 11的結(jié)果4作為識(shí)別碼。

      你的任務(wù)是編寫程序判斷輸入的ISBN號(hào)碼中識(shí)別碼是否正確,如果正確,則僅輸出Right;如果錯(cuò)誤,則輸出你認(rèn)為是正確的ISBN號(hào)碼。

      【輸入】

      輸入文件isbn.in只有一行,是一個(gè)字符序列,表示一本書的ISBN號(hào)碼(保證輸入符合ISBN號(hào)碼的格式要求)。

      【輸出】

      輸出文件isbn.in共一行,假如輸入的ISBN號(hào)碼的識(shí)別碼正確,那么輸出Right,否則,按照規(guī)定的格式,輸出正確的ISBN號(hào)碼(包括分隔符-)。

      【輸入輸出樣例1】

      Isbn.inisbn.out

      0-670-82162-4Right

      【輸入輸出樣例2】

      isbn.inisbn.out

      0-670-82162-00-670-82162-4

      【試題分析】

      首先將ISBN串前9個(gè)數(shù)字分別轉(zhuǎn)換成整型數(shù)并儲(chǔ)存在數(shù)組里,因?yàn)檫@9個(gè)數(shù)字從左到右分別乘以1,2,,9的和的最大值小于32767,所以使用整型變量?jī)?chǔ)存。

      按試題要求計(jì)算識(shí)別碼,并與ISBN號(hào)碼中識(shí)別碼做比較,如果正確,輸出Right;如果錯(cuò)誤,則輸出正確的ISBN號(hào)碼。

      【參考程序】

      program isbn;

      var

      i,j:integer;

      s:string;

      a:array[1..9] of integer;

      l:char;

      procedure input;{輸入過程}

      var

      f:text;

      begin

      assign(f,'isbn.in');

      reset(f);

      read(f,s);{將ISBN碼讀入字符串s中}

      close(f);

      end;

      procedure output;{輸出過程}

      var

      f:text;

      begin

      assign(f,'isbn.out');

      rewrite(f);

      if s[13]=l then

      write(f,'Right'){如果識(shí)別碼正確則輸出Right}

      else

      begin{如果不正確則輸出正確的ISBN碼}

      for i:=1 to 12 do

      write(f,s[i]);

      write(f,l);

      end;

      close(f);

      end;

      procedure main;{主過程}

      begin

      j:=0;

      for i:=1 to 11 do{將前九個(gè)數(shù)轉(zhuǎn)換成整型并存入a數(shù)組}

      if s[i]'-' then

      begin

      inc(j);

      if s[i]='0' then

      a[j]:=0

      else

      a[j]:= ord(s[i])-48;

      end;

      j:=0;

      for i:=1 to 9 do

      j:=a[i]*i+j;

      j:=j mod 11;{計(jì)算識(shí)別碼}

      if j=10 then

      l:='X'{處理結(jié)果為10}

      else

      if j=0 then

      l:='0'

      else

      l:= chr(j+48);

      end;

      begin

      input;

      main;

      output;

      end.

      2.排座椅

      (seat.pas/c/cpp)

      【問題描述】

      上課的時(shí)候總有一些同學(xué)和前后左右的人交頭接耳,這是令小學(xué)班主任十分頭疼的一件事情。不過,班主任小雪發(fā)現(xiàn)了一些有趣的現(xiàn)象,當(dāng)同學(xué)們的座次確定下來之后,只有有限的D對(duì)同學(xué)上課時(shí)會(huì)交頭耳。同學(xué)們?cè)诮淌抑凶闪薓行N列,坐在第i行第j列的同學(xué)的位置是(i,j),為了方便同學(xué)們進(jìn)出,在教室中設(shè)置了K條橫向的通道,L條縱向的通道。于是,聰明的小雪想到了一個(gè)辦法,或許可以減少上課時(shí)學(xué)生交頭接耳的問題:她打算重新擺放桌椅,改變同學(xué)們桌椅間通道的位置,困為如果一條通道隔開了兩個(gè)會(huì)交頭接耳的同學(xué),那么他們就不會(huì)交頭接耳了。

      請(qǐng)你幫忙給小雪編寫一個(gè)程序,給出最好的通道劃分方案。在該方案下,上課時(shí)交頭接耳的學(xué)生的對(duì)數(shù)最少。

      【輸入】

      輸入文件seat.in的第一行,有5個(gè)用空格隔開的整數(shù),分別是M,N,K,L,D(2﹤=N,M﹤=1000,0﹤=K﹤M,0﹤=L﹤N,D﹤=2000)。

      接下來D行,每行有4個(gè)用空格隔開的整數(shù)。第i行的4個(gè)整數(shù)Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)與(Pi,Qi)的兩個(gè)同學(xué)會(huì)交頭接耳(輸入保證他們前后相鄰或者左右相鄰)。

      輸入數(shù)據(jù)保證最優(yōu)方案的唯一性。

      【輸出】

      輸出文件seat.out共兩行。

      第一行包含K個(gè)整數(shù),a1 a2 ak,表示第a1行和第a1+1行之間、第a2行和a2+1行之間、、第ak行和第ak+1行之間要開展通道,其中ai﹤ ai+1,每?jī)蓚(gè)整數(shù)之間用空格隔開(行尾沒有空格)。

      第二行包含L個(gè)整數(shù),b1 b2bl,表示第b1列和b1+1列之間、第b2列和b2+1列之間、、第bl列和第bl +1列之間要開辟通道,其中bi﹤bi+1,每?jī)蓚(gè)整數(shù)之間用空格隔開(行尾沒有空格)。

      【輸入輸出樣例】

      seat.inseat.out

      4 5 1 2 3

      4 2 4 3

      2 3 3 3

      2 5 2 42

      2 4

      【輸入輸出樣例解釋】

      ┌─┬─╂─┬─╂─┐

      4 │ │* ┃* │ ┃ │

      ├─┼─╂─┼─╂─┤

      3 │ │ ┃※│ ┃ │

      ━┿━┿━╋━┿━╋━┿

      2 │ │ ┃※│+ ┃+ │

      ├─┼─╂─┼─╂─┤

      1 │ │ ┃ │ ┃ │

      └─┴─╂─┴─╂─┘

      1 2 ┃3 4 ┃5

      【試題分析】

      先將每對(duì)交頭接耳的同學(xué)位置(Xi,Yi)與(Pi,Qi)分別讀入X、Y、P、Q四個(gè)一維數(shù)組中,再找出需設(shè)通道(隔開交頭接耳的學(xué)生)的位置,橫向通道存入a數(shù)組,豎向通道存入b數(shù)組,數(shù)組的角標(biāo)表示通道位置,數(shù)組內(nèi)儲(chǔ)存能隔開交頭接耳學(xué)生的對(duì)數(shù)。

      從a、b數(shù)組中找出能隔開交頭接耳的學(xué)生對(duì)數(shù)最多的通道,分別存入aa、bb數(shù)組,排序后輸出。

      【參考程序】

      program seat;

      type

      arr=array[1..999] of integer;

      var

      m,n,k,l,d,i:integer;

      x,y,p,q:array[1..2000] of integer;

      a,b,aa,bb:arr;

      procedure input; {輸入過程}

      var

      f:text;

      begin

      assign(f,'seat.in');

      reset(f);

      readln(f,m,n,k,l,d);

      for i:=1 to d do

      readln(f,x[i],y[i],p[i],q[i]);{讀入會(huì)交頭接耳學(xué)生的位置}

      close(f);

      end;

      procedure output;{輸出過程}

      var

      f:text;

      begin

      assign(f,'seat.out');

      rewrite(f);

      for i:=1 to k do

      begin

      write(f,aa[i]);

      if ik then write(f,' ');{防止行尾有空格}

      end;

      writeln(f);

      for i:=1 to l do

      begin

      write(f,bb[i]);

      if il then write(f,' ');

      end;

      close(f);

      end;

      procedure td(a:arr;k,m:integer;var aa:arr);{ 通道劃分過程}

      var

      j,u,i,t:integer;

      begin

      j:=0;

      while jk do{找出能隔開交頭接耳的學(xué)生對(duì)數(shù)最多的通道}

      begin

      u:=-1;

      for i:=1 to m-1 do

      if a[i]u then

      begin

      u:=a[i];

      t:=i;

      end;

      a[t]:=-1;

      inc(j);

      aa[j]:=t;

      end;

      for i:=1 to k-1 do{排序}

      begin

      u:=i;

      for j:=i+1 to k do

      if aa[j]aa[u] then u:=j;

      t:=aa[i];aa[i]:=aa[u];aa[u]:=t;

      end;

      end;

      procedure main; {主過程}

      var

      u,t,r,o:integer;

      begin

      for i:=1 to d do{找出在何處需設(shè)通道隔開交頭接耳的學(xué)生}

      if y[i]=q[i] then

      if x[i]p[i] then inc(a[x[i]]) else inc(a[p[i]])

      else if y[i]q[i] then inc(b[y[i]]) else inc(b[q[i]]);

      td(a,k,m,aa);

      td(b,l,n,bb);

      end;

      begin

      input;

      main;

      output;

      end.

    【isbn信息學(xué)聯(lián)賽試題】相關(guān)文章:

    足球聯(lián)賽排名_足球聯(lián)賽活動(dòng)總結(jié)08-17

    排球聯(lián)賽心得總結(jié)12-13

    排球聯(lián)賽的訓(xùn)練計(jì)劃07-16

    足球聯(lián)賽作文07-07

    足球聯(lián)賽方案04-02

    足球聯(lián)賽方案04-02

    校園排球聯(lián)賽活動(dòng)總結(jié)03-03

    校園足球聯(lián)賽的方案05-17

    班級(jí)足球聯(lián)賽方案04-07

    足球班級(jí)聯(lián)賽方案04-03

    国产一级a爱做免费播放_91揄拍久久久久无码免费_欧美视频在线播放精品a_亚洲成色在线综合网站免费

      日本特黄特黄刺激大片免费 | 先锋影音AV资源在线高清 | 午夜福利在线播放 | 热久久精品视频14 | 日本迷奷系列在线播放97 | 亚洲国产第一区第二区第三区 |