OJ題作業(yè)(10)_第1頁
OJ題作業(yè)(10)_第2頁
OJ題作業(yè)(10)_第3頁
OJ題作業(yè)(10)_第4頁
OJ題作業(yè)(10)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、作業(yè)(10)1249Problem A: Sequence Problem (IV) : Function Practice (Append Code)Time Limit: 1 Sec  Memory Limit: 4 MBSubmit: 3398  Solved: 1710SubmitStatusWeb BoardDescription整數(shù)序列是一串按特定順序排列的整數(shù),整數(shù)序列的長度是序列中整數(shù)的個數(shù),不可定義長度為負(fù)數(shù)的整數(shù)序列。兩整數(shù)序列A、B的和定義為一個新的整數(shù)序列C,序列C的長度是A、B兩者中較長的一個,序列C的每個位置上的整數(shù)都是A、B

2、對應(yīng)位置之和。若序列A、B不等長,不妨假設(shè)A比B整數(shù)多,那么序列C中多出B的那部分整數(shù)視作A的對應(yīng)位置上的整數(shù)與0相加。你的任務(wù)是計(jì)算符合某些要求的整數(shù)序列的和,這些序列中的整數(shù)都是小于1000的非負(fù)整數(shù)。-編寫以下函數(shù),使append.c中的main()函數(shù)能正確運(yùn)行:原型:int max(int a, int b);功能:返回a和b中較大的一個int值。原型:int init_seq(int seq, int size);功能:把int數(shù)組seq中的前size個元素初始化為0。原型:int get_seq(int seq);功能:按輸入格式的要求,讀取size個元素存放在seq,返回讀到的

3、元素個數(shù)。原型:int put_seq(int seq, int size);功能:按輸出格式的要求,把seq中的前size個元素輸出。原型:int add_seq(int sum_seq, int add_seq, int size);功能:把sum_seq和add_seq中的前size個元素相加,結(jié)果存儲sum_seq中。Input輸入的第一行為一個整數(shù)M(M>0),后面有M行輸入。每行第一個整數(shù)為N(N<=1000),后接一個長度為N的整數(shù)序列。Output對輸入的整數(shù)序列兩兩相加:第1行和第2行相加、第2行和第3行相加按順序輸出結(jié)果:每行輸出一個整數(shù)序列,每兩個整數(shù)之間用一

4、個空格分隔。若最后序列不足兩個,則視作補(bǔ)一個長度為0的整數(shù)序列相加。值得注意的是一個長度為0的整數(shù)序列也應(yīng)該有輸出,即使沒有整數(shù)輸出,也應(yīng)該占有一行,因?yàn)椤懊啃休敵鲆粋€整數(shù)序列”。Sample Input33 1 2 35 10 15 20 30 504 100 200 300 400Sample Output11 17 23 30 50110 215 320 430 50100 200 300 400HINTappend.c中的main()函數(shù)簡述:1. 定義兩個數(shù)組odd_seq和even_seq,分別存儲奇數(shù)行輸入的序列和偶數(shù)行輸入序列,odd_size和even_size是輸入的序列元

5、素個數(shù)。2. 輸入總行數(shù)m;3. 初始化odd_seq的全部元素,輸入第一行序列,存入odd_seq,元素個數(shù)存入odd_size;4. 從第2行至第m行重復(fù)以下步驟:     4.1 要輸入的是偶數(shù)行:even_seq全體清0,讀even_seq,把even_seq加到odd_seq上,輸出odd_seq;     4.2 要輸入的是奇數(shù)行時與偶數(shù)行操作的變量相反,步驟一致;5. 輸出最后一行。Append Codeappend.c, #include <stdio.h>  #define MAX_SIZE 1

6、0000  int max(int a, int b)        if(a<b)  return b;      else return a;    int init_seq(int seq, int size)        int i;      for(i=0;i<size;i+)    

7、;      seqi=0;    int get_seq(int seq)        int cnt=0,shit;      scanf("%d",&shit);      while (cnt<shit)          s

8、canf("%d",&seqcnt+);      return shit;    int put_seq(int seq, int size)        int i;      for (i=0;i<size;i+)               &#

9、160;printf("%d",seqi);          if (i!=size-1)             putchar(' ');          else putchar('n');     

10、;       if (size=0)          putchar('n');    int add_seq(int sum_seq, int add_seq, int size)        int i;      for (i=0;i<size;i+)   

11、0;      sum_seqi+=add_seqi;          int main()     int  odd_seqMAX_SIZE,  odd_size;     int even_seqMAX_SIZE, even_size;     int m, i, put_size;   &#

12、160;   scanf("%d", &m);     init_seq(odd_seq, MAX_SIZE);     odd_size = get_seq(odd_seq);     for(i = 2; i <= m; i+)              if(i % 2 = 0) 

13、0;                    init_seq(even_seq, MAX_SIZE);             even_size = get_seq(even_seq);         &#

14、160;   put_size = max(odd_size, even_size);             add_seq(odd_seq, even_seq, put_size);             put_seq(odd_seq, put_size);      &

15、#160;           else                     init_seq(odd_seq, MAX_SIZE);             odd_size

16、 = get_seq(odd_seq);             put_size = max(odd_size, even_size);             add_seq(even_seq, odd_seq, put_size);           

17、  put_seq(even_seq, put_size);                   if(m % 2 = 0)         put_seq(even_seq, even_size);     else       

18、; put_seq(odd_seq, odd_size);     return 0; 1053Problem B: Matrix Problem : Array PracticeTime Limit: 1 Sec  Memory Limit: 4 MBSubmit: 7795  Solved: 2678SubmitStatusWeb BoardDescription求一個m×n階矩陣A的轉(zhuǎn)置矩陣AT。矩陣A的每個元素都在int類型的范圍之內(nèi)。Input輸入的第一行為一個整數(shù)M(M>0),

19、后面有M組輸入數(shù)據(jù)。每組數(shù)據(jù)以兩個正整數(shù)m和n開始,滿足0<m,n<=100,接下來為一個m行n列的矩陣A。Output輸出為多組,每組輸出A的轉(zhuǎn)置矩陣AT。矩陣的輸出為:每行兩個元素之間用一個空格分開,每行最后一個元素之后為一個換行,在下一行開始輸出矩陣的下一行。每兩組輸出之間用一個空行分隔開。Sample Input13 31 2 34 5 67 8 9Sample Output1 4 72 5 83 6 9HINT二維數(shù)組存儲矩陣。#include <stdio.h> #include <stdlib.h> int main()   

20、;  int arr1102102,num, n, m, k, i, j;     scanf("%d", &num);     for(k = 0; k < num; k+)              scanf("%d%d", &n, &m);      

21、   for(i = 0; i < n; i+)             for(j = 0; j < m; j+)                 scanf("%d",&arr1ji);      

22、;   for(i = 0; i < m; i+)                      for(j = 0; j < n-1; j+)                 printf("

23、;%d ",arr1ij);             printf("%d",arr1ij);             printf("n");               

24、60;  printf("n");          return 0; 1054Problem C: Matrix Problem (II) : Array PracticeTime Limit: 1 Sec  Memory Limit: 4 MBSubmit: 5651  Solved: 2246SubmitStatusWeb BoardDescription求兩個矩陣A、B的和。根據(jù)矩陣加法的定義,只有同階的矩陣才能相加。可以確保

25、所有運(yùn)算結(jié)果都在int類型的范圍之內(nèi)。Input輸入數(shù)據(jù)為多個矩陣,每個矩陣以兩個正整數(shù)m和n開始,滿足0<m,n<=100,接下來為一個m行n列的矩陣A。當(dāng)輸入的m和n均為0時,表示輸入數(shù)據(jù)結(jié)束Output對輸入的矩陣兩兩相加:第1個和第2個相加、第3個和第4個相加按順序輸出矩陣相加的結(jié)果:每行兩個元素之間用一個空格分開,每行最后一個元素之后為一個換行,在下一行開始輸出矩陣的下一行。若輸入的矩陣不為偶數(shù)個,最后剩余的矩陣不產(chǎn)生任何輸出。不滿足矩陣加法定義的數(shù)據(jù)輸出“Not satisfied the definition of matrix addition!”每兩組輸出之間用一

26、個空行分隔開。Sample Input3 31 2 34 5 67 8 93 39 8 76 5 43 2 13 31 1 11 1 11 1 12 22 22 21 100 0Sample Output10 10 1010 10 1010 10 10Not satisfied the definition of matrix addition!HINT矩陣的加法就是對應(yīng)位置上的元素相加。#include<stdio.h>  #include<string.h>  #include<stdlib.h>  int main()&#

27、160;       int arr1105105,arr2105105;      int x,y;      while(scanf("%d%d",&x,&y)!=EOF&&x!=0&&y!=0)                int i

28、,j,m, n;        for(i=0;i<x;i+)          for(j=0;j<y;j+)              scanf("%d",&arr1ij);       scanf(&q

29、uot;%d%d",&m,&n);        for(i=0;i<m;i+)          for(j=0;j<n;j+)              scanf("%d",&arr2ij);    

30、0;  if(m=0&&n=0)           break;       else if(m=x&&n=y)              for(i=0;i<x;i+)         &

31、#160;        for(j=0;j<y;j+)                          if(!j) printf("%d",arr1ij+arr2ij);       &#

32、160;       else printf(" %d",arr1ij+arr2ij);                      printf("n");             

33、; printf("n");              else printf("Not satisfied the definition of matrix addition!nn");           1055Problem D: Matrix Problem (III) : Array PracticeTime Limit: 1 Sec&

34、#160; Memory Limit: 4 MBSubmit: 5100  Solved: 1617SubmitStatusWeb BoardDescription求兩個矩陣A、B的乘積C=AB。根據(jù)矩陣乘法的定義,只有A的列數(shù)和B的行數(shù)相同才能相乘。可以確保所有運(yùn)算結(jié)果都在int類型的范圍之內(nèi)。Input輸入數(shù)據(jù)為多個矩陣(最少2個),每個矩陣以兩個正整數(shù)m和n開始,滿足0<m,n<=100,接下來為一個m行n列的矩陣A。當(dāng)輸入的m和n均為0時,表示輸入數(shù)據(jù)結(jié)束。Output對輸入的矩陣兩兩相乘:第1個和第2個相乘、第1個和第2個相乘的結(jié)果和第3個相

35、乘按順序輸出矩陣相乘的結(jié)果:每行兩個元素之間用一個空格分開,每行最后一個元素之后為一個換行,在下一行開始輸出矩陣的下一行。若前k個矩陣相乘的結(jié)果和第k+1個矩陣無法相乘(即不滿足矩陣乘法定義),則輸出“Not satisfied the definition of matrix multiplication!”。然后用第k+1個矩陣去和第k+2個矩陣相乘。最后一個矩陣只做乘數(shù)。每兩組輸出之間用一個空行分隔開。Sample Input2 31 1 11 1 13 31 2 34 5 67 8 93 10000 0Sample Output12 15 1812 15 1800HINT矩陣的乘法就是

36、一行乘以一列加起來做一個元素。#include <stdio.h> #include <string.h> int main()     int i, j, k, l = 1, m, n, x , y, a101101, b101101, c101101;     while(scanf("%d%d", &m, &n) != EOF)            

37、  if(m = 0 && n = 0) break;         else if(l % 2 = 1)                      x = m;           

38、;  y = n;             for(i = 0; i < m; i +)                 for(j = 0; j < n; j +)           

39、      scanf("%d", &aij);                  else if(l%2 = 0)                     &#

40、160;for(i = 0; i < m; i +)                 for(j = 0; j < n; j +)                 scanf("%d", &bij);    &

41、#160;        if(y = m)                               /memset(c,0,sizeof(c);       

42、60;          for(i = 0; i < x; i +)                     for(j = 0; j < n; j +)            

43、;                                  cij = 0;                &

44、#160;        for(k = 0; k < y; k +)                             cij += aik*bkj;       &

45、#160;                              for(i = 0; i < x; i +)                

46、0;                             for(j = 0; j < n; j +)                  &

47、#160;                                   if(j = 0) printf("%d", cij);         

48、60;                   else printf(" %d", cij);                         

49、0;   aij = cij;                             cij = 0;                &#

50、160;            /memset(c,0,sizeof(c);                         printf("n");      

51、0;              printf("n");                     y = n;           

52、0;         l +;                          else                

53、;             printf("Not satisfied the definition of matrix multiplication!n");                 printf("n");     &

54、#160;           for(i = 0; i < m; i +)                     for(j = 0; j < n; j +)          

55、60;                                           aij = bij;      

56、60;                      bij = 0;                            

57、;                  /memset(b,0,sizeof(b);                  l +;           &

58、#160;      x = m;                  y = n;                      l +;    

59、;  1298Problem E: 遞歸的輾轉(zhuǎn)相除法Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3219  Solved: 1821SubmitStatusWeb BoardDescription輾轉(zhuǎn)相除法,也稱歐幾里得算法,是求最大公約數(shù)的算法。輾轉(zhuǎn)相除法首次出現(xiàn)于歐幾里得的幾何原本(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現(xiàn)的九章算術(shù)。兩個整數(shù)的最大公約數(shù)(亦稱公約數(shù))是能夠同時整除它們的最大的正整數(shù)。輾轉(zhuǎn)相除法基于如下原理:兩個整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的差的最

60、大公約數(shù)。根據(jù)這個原理,不難得出用輾轉(zhuǎn)相除法求最大公約數(shù)的遞歸定義:下面,給出兩個正整數(shù)A和B,求他們的最大公約數(shù)(gcd(A,B))和最小公倍數(shù)(lcm(A,B))。-Invalid Word(禁用單詞)錯誤:在解決這個題目時,某些關(guān)鍵詞是不允許被使用的。如果提交的程序中包含了下列的關(guān)鍵詞之一,就會產(chǎn)生這個錯誤。被禁用的關(guān)鍵字:循環(huán)語句for、while,甚至包括分支語句的switch、case、goto、break。被禁用的頭文件:math.h、stdlib.h。Input輸入為兩個整數(shù)A和B,滿足0<A,B<215。Output輸出兩數(shù),分別為gcd(A,B)和lcm(A,B

61、),用一個空格分隔。Sample Input24 36Sample Output12 72#include<stdio.h> int gcd(int a,int b)     int min, x;     if(a = b)         return b;     else          

62、;    if(a < b)                      min = a;             x = b - a;         &

63、#160;          else  if(a > b)                      min = b;             x = a - b; 

64、60;                if(min = x)             return min;         return  gcd(min,x);        

65、   int lcm(int a,int b)     return (a * b) / gcd(a, b);    int main()     int a, b;     scanf("%d %d", &a, &b);     printf("%d %d", gcd(a,b), lcm(a,b);    &#

66、160;return 0; 1245Problem F: The Hanoi TowerTime Limit: 1 Sec  Memory Limit: 16 MBSubmit: 2343  Solved: 1431SubmitStatusWeb BoardDescription“Hanoi Tower”問題的背景和搬移規(guī)則大家是否都很熟悉了?為了突出重點(diǎn),我把問題描述放在下面的HINT部分,不了解的同學(xué)可以參考。首先我們Hanoi塔上的盤子按從上到下編號,假設(shè)Hanoi塔上有n個盤子,那么最小的那個盤子就是1號盤子,然后是2號、3號最大的盤子是n號。H

67、anoi塔的3根針我們也進(jìn)行編號,最左邊的是1號,中間的是2號,最右邊的是3號。如果我們想把n=2個盤子從1號針搬到2號針,那么3號針作為暫存使用。整個搬移過程是這樣的:1號盤子:從1號針搬到3號針2號盤子:從1號針搬到2號針1號盤子:從3號針搬到2號針你的任務(wù)是編個程序把上面的搬移過程輸出來,程序需要輸入盤子的個數(shù)n,并且這n個盤子一開始在哪根針,要搬到哪根針都是從輸入得到的。Input輸入為多行,至EOF結(jié)束。每行輸入四個整數(shù),第一個整數(shù)為盤子數(shù)n(1<=n<=10),后面的三個整數(shù)是三根針的編號,它們排列的順序是有不同含義的:第二個整數(shù)是n個盤子一開始的位置,第四個整數(shù)是盤子

68、最終要放置的位置,第三個整數(shù)是搬移過程中用來暫存盤子的。如:輸入“1 2 3 1”表示只有一個盤子,從第2根針搬到第1跟針上。Output每一行輸入都對應(yīng)一個搬移過程,首先輸出一個“case i”,表示對應(yīng)的第i個輸入。然后再它后面輸出搬移的步驟。如:輸入“1 2 3 1”表示只有一個盤子,從第2根針搬到第1跟針上。那么它的搬移步驟只有一步:把1號盤子從第2跟針搬到第1跟針,即輸出:plate 1 : from 2 to 1Sample Input1 2 3 12 2 3 13 1 2 34 3 1 2Sample Outputcase 1 : plate 1 : from 2 to 1cas

69、e 2 : plate 1 : from 2 to 3 plate 2 : from 2 to 1 plate 1 : from 3 to 1case 3 : plate 1 : from 1 to 3 plate 2 : from 1 to 2 plate 1 : from 3 to 2 plate 3 : from 1 to 3 plate 1 : from 2 to 1 plate 2 : from 2 to 3 plate 1 : from 1 to 3case 4 : plate 1 : from 3 to 1 plate 2 : from 3 to 2 plate 1 : from

70、 1 to 2 plate 3 : from 3 to 1 plate 1 : from 2 to 3 plate 2 : from 2 to 1 plate 1 : from 3 to 1 plate 4 : from 3 to 2 plate 1 : from 1 to 2 plate 2 : from 1 to 3 plate 1 : from 2 to 3 plate 3 : from 1 to 2 plate 1 : from 3 to 1 plate 2 : from 3 to 2 plate 1 : from 1 to 2HINT 梵塔問題出自古印度的數(shù)學(xué)故事。歷史學(xué)家

71、鮑爾在數(shù)學(xué)拾零一書中是這樣講述這段故事的:在世界中心貝拿勒斯的圣廟里,安放著一個黃銅板,板上插著三根寶石針。每根針高約20英寸。梵天在創(chuàng)造世界的時候,在其中一根針上從下到上放了由大到小的64塊金片,這就是梵塔(見圖1.1)。不論白天黑夜,都有一個值班的僧侶按照梵天不渝的法則,把這些金片在三根針上移來移去:一次只能移一片,金片只能放在三根針上,并且要求在每根針上,都不能出現(xiàn)大片在上小片在下的情況。當(dāng)所有64片都從梵天創(chuàng)造世界時所放的那根針移到另外一根針上時,世界就將在一聲霹靂中消滅,梵塔、廟宇和眾生都將同歸于盡。這個故事聽起來很可怕。只要那些值班的僧侶按照“梵天不渝”的法則把64塊金片從一根針移

72、到另一根針上,世界末日就會到來。那么,僧侶們完成梵塔的移動工作需要多少時間呢?梵塔中共有64塊金片,要把它們從一根針按“梵天不渝”的法則移到另一根針,即使僧侶們一次錯誤也不犯,也需移動264-1 = 18,446,744,073,709,511,615次。如果移動一塊金片需要一秒鐘,也要近58萬億年才能完成,根據(jù)宇宙進(jìn)化論的推算,整個太陽系的壽命大約200億年。可見,我們大可不必為梵塔故事的寓言而恐慌。#include <stdio.h> int move(int n, int a, int b, int c)     if(n = 1 )

73、             printf("   plate 1 : from %d to %dn", a, c);         return 0;          else    move(n - 1, a, c, b);  

74、;   printf("   plate %d : from %d to %dn", n, a, c);     move(n - 1, b, a, c); /*int move(int n,int  a,int c)    printf("   plate %d : from %d to %dn",n,a,c); int move1(int n,int a,int b,int c)   

75、;  if(n=1) move(1,a,c);     else                   move1(n-1,a,c,b);     move(n,a,c);     move1(n-1,b,a,c);      */ 

76、0;  int main()     int case1 = 1, plate, start, target, pass;     while(scanf("%d%d%d%d", &plate, &start, &pass, &target) != EOF)              printf("case %d

77、:n", case1);         move(plate, start, pass, target);         printf("n");         case1 +;      1208Problem G: 編寫函數(shù):Swap (II) (Append Code)Time

78、 Limit: 1 Sec  Memory Limit: 2 MBSubmit: 1918  Solved: 1244SubmitStatusWeb BoardDescription編寫用來交換兩段連續(xù)存儲空間的函數(shù),使得“Append Code”中的main()函數(shù)能正確運(yùn)行。-編寫一個函數(shù)swap_any()用來進(jìn)行交換:原型:int swap_any(void *s, void *t, unsigned n);功能:前兩個參數(shù)(指針s和指針t)分別標(biāo)記出兩處連續(xù)存儲區(qū)域的起始地址,交換自s和t中地址開始的連續(xù)n個字節(jié)。函數(shù)的調(diào)用格式見“Append

79、 Code”。-Invalid Word(禁用單詞)錯誤:在解決這個題目時,某些關(guān)鍵詞是不允許被使用的。如果提交的程序中包含了下列的關(guān)鍵詞之一,就會產(chǎn)生這個錯誤。宏定義define被禁用。Input 測試數(shù)據(jù)分4四組,每組占2行,為兩個相互交換的同類型數(shù)據(jù)。這四組測試數(shù)據(jù)分別為:2個不超過100個字符的串、2個單字符、2個整數(shù)和2個浮點(diǎn)數(shù)。Output 輸出為4行,將2個同類型的數(shù)據(jù)交換后輸出,用一個空格分開。Sample Input35353535Sample Output5 35 35 35 3HINT 這里可能用到庫函數(shù)malloc()和memcpy()。#

80、include<stdio.h> #include<stdlib.h> #include<memory.h> int swap_any(void *s, void *t, unsigned n)     void *tmp;     tmp = malloc(n);     if(tmp = NULL)         return 1;   

81、;  memcpy(tmp, s, n);     memcpy(s, t, n);     memcpy(t, tmp, n);     free(tmp);     return 0;   int main()     int a, b;     double x, y;    

82、60;char c, d;     char s1001, t1001;       gets(s);     gets(t);     swap_any(s, t, sizeof(s);     printf("%s %sn", s, t);       c = getchar();  

83、   getchar();     d = getchar();     getchar();     swap_any(&c, &d, sizeof(char);     printf("%c %cn", c, d);       scanf("%d %d", &a, &b)

84、;     swap_any(&a, &b, sizeof(int);     printf("%d %dn", a, b);       scanf("%lf %lf", &x, &y);     swap_any(&x, &y, sizeof(double);     printf(&q

85、uot;%lg %lgn", x, y); 1383Problem H: 動態(tài)的數(shù)組Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3346  Solved: 1251SubmitStatusWeb BoardDescription輸入N個浮點(diǎn)數(shù),輸出其中第m個第n個數(shù),滿足m<n。-你需要編寫以下4個函數(shù),完成這個程序:double* allocate(int n),在動態(tài)內(nèi)存上分配n個元素的double型數(shù)組,并返回其首地址。void input(double* p, int n),向p中

86、輸入n個double型數(shù)值。void output(double* p, int n),把長度為n的數(shù)組p中符合條件的第m個第n個元素輸出,m和n從標(biāo)準(zhǔn)輸入讀取。void release(double* p),釋放p所指的動態(tài)內(nèi)存空間。函數(shù)的調(diào)用格式見“Append Code”。Input輸入的第一個整數(shù)N(在int范圍內(nèi)),表示后跟N個double類型的浮點(diǎn)數(shù)。輸入的最后是兩個整數(shù)m和n,滿足m<n,m和n在int范圍內(nèi),但不一定在1N之間。Output輸出第m個第n個之間的浮點(diǎn)數(shù),每個數(shù)占一行。若區(qū)間m,n和1,N沒有任何重疊,則輸出“no output”。區(qū)間m,n和1,N有交集時

87、,但給出的n超出第N個數(shù)的范圍,則只需輸出到第N個數(shù),m超出范圍時同樣處理。Sample Input201 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2015 25Sample Output151617181920HINTAppend Codeappend.c, append.cc, #include<stdio.h> #include<stdlib.h> double* allocate(int n)     double *p;     

88、p = malloc (n * sizeof(double);     return p; void input(double *p, int n)     int i;     for(i = 0; i < n; i +)         scanf("%lf", p + i); void output(double* p, int n)   

89、60; int a, b, i;     scanf("%d%d", &a, &b);     if(b <= 0|a >= n)         printf("no output");     else          

90、60;  if(a < 0)             a = 0;         else            a -= 1;         if(b > n)

91、            b = n;         for(i = a; i < b; i +)             printf("%lgn",pi);      void release(double*

92、p)     free(p);     p = NULL;   int main()     int len;     double *array;     scanf("%d", &len);     array = allocate(len);     input(a

93、rray, len);     output(array, len);     release(array); 1334Problem I: 動態(tài)的字符串排序Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2841  Solved: 815SubmitStatusWeb BoardDescription把字符串按照ASCII碼序的從小到大排列出來。串的ASCII碼序遵循如下遞歸定義:1 兩串的前n-1個字符相同,第n個字符ASCI

94、I碼序小的排在前面;2 只有兩串的字符完全相同時,才有兩串相等。字符的ASCII碼序比較可以用strcmp()函數(shù)完成。Input第一行輸入為一個整數(shù)N(N<=50,000),后接N行,每行一個字符串,串長不超過100,000。Output輸出為N行,按照字符串的ASCII碼序排列,ASCII碼序小的排前面。Sample Input10abcbcacacacaacababcdabaSample OutputaacabaabcacababcbcccadaHINT用二維數(shù)組很難一次性分配出這么大的空間了,要用到根據(jù)輸入變化的動態(tài)分配的內(nèi)存才行。這里需要動態(tài)的數(shù)據(jù)結(jié)構(gòu),比如,字符指針的數(shù)組“c

95、har *s”,或者是二維的字符指針“char *s”,等等。#include<stdio.h> #include<string.h> #include<stdlib.h> int main()     int n, i, j, len;     scanf("%d", &n);     getchar();     char *sn, *s1;   &

96、#160; for(i = 0; i < n; i +)              s1 = malloc(sizeof(char) * 100001);         gets(s1);         len = strlen(s1);      

97、   si = malloc(sizeof(char) * (len + 1);         strcpy(si, s1);         free(s1);          int *temp;     for(i = 0; i < n - 1; i +)  &#

98、160;      for(j = i; j < n; j +)         if(strcmp(si, sj) > 0)                      temp = si;     

99、0;       si = sj;             sj = temp;              for(i = 0 ; i < n ; i+)            

100、60; printf("%sn", si);         free(si);      1048Problem J: 魔方陣Time Limit: 1 Sec  Memory Limit: 16 MBSubmit: 3512  Solved: 1623SubmitStatusWeb BoardDescription所謂N階魔方陣,是一個N*N的方陣,其元素由1到N2組成,且方陣每行每列以及對角線的元素和

101、相等。如三階魔方陣:8 1 63 5 74 9 2魔方陣的規(guī)律如下:   從1N*N的 各個數(shù)依次如下規(guī)則存放:      (1) 1在第一行中間一列;      (2) 每一個數(shù)存放的行比前一個數(shù)的行數(shù)減一,列數(shù)加一(如上的三階方陣5在4的上一行,后一列);      (3) 如果上一個數(shù)在第一行,則下一個數(shù)在最后一行,列數(shù)加一;      (4) 如果上一個數(shù)在最后一列,則下一個數(shù)在第一列,行數(shù)減一;  

102、0;   (5) 如果按上述規(guī)則確定的位置已經(jīng)有數(shù),或上一個數(shù)在第一行第N列,則下一個數(shù)放在上一個數(shù)的正下方。Input輸入包含多組數(shù)據(jù),每組為一個小于100的正奇數(shù)。Output對于每個輸入的N,輸出N階魔方陣;兩組數(shù)據(jù)之間用一個空行分隔。方陣中每行每兩個數(shù)之間有一個空格,行首和行末沒有多余的空格。Sample Input3Sample Output8 1 63 5 74 9 2#include <stdio.h>  int main()        int a,b,c,d,i,j;

103、60;     int s100100 ;     while(scanf("%d",&b)!=EOF)          if(b%2!=0)                       &

104、#160;for (i=0; i<b; i+)                  for (j=0; j<b; j+)                      sij=0;   

105、0;          d=(b-1)/2;              c=0;              s0d=1;           

106、;   for(a=2; a<=b*b; a+)                                if(c-1>=0)           &#

107、160;                            if(d+1>b-1)                                  

溫馨提示

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

評論

0/150

提交評論