北京理工大學(xué)2013級C程序設(shè)計(jì)非信息類答案part2_第1頁
北京理工大學(xué)2013級C程序設(shè)計(jì)非信息類答案part2_第2頁
北京理工大學(xué)2013級C程序設(shè)計(jì)非信息類答案part2_第3頁
北京理工大學(xué)2013級C程序設(shè)計(jì)非信息類答案part2_第4頁
北京理工大學(xué)2013級C程序設(shè)計(jì)非信息類答案part2_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

北京理工大學(xué)2013級C程序設(shè)計(jì)非信息類答案part249.【小學(xué)遞歸】殺雞用牛刀——要用遞歸?。〕煽?開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月背景:

哈哈!我們終于學(xué)了遞歸了,現(xiàn)在大家一定感到非常有意思吧,那個(gè)典型的“漢諾塔”問題,一個(gè)非常短的程序居然可以完成如此復(fù)雜的工作,真是神奇??!來吧,讓我們也動(dòng)手編寫一個(gè)遞歸程序,當(dāng)然,我們要編寫的不可能太復(fù)雜。功能:

求整數(shù)n到m區(qū)間的累加和,其中n<=m。輸入:區(qū)間的起始點(diǎn)n

區(qū)間的終止點(diǎn)m輸出:

累加和要求:使用遞歸算法完成。如此簡單的題目當(dāng)然要有隱含的測試用例啦,就3個(gè),看看誰能猜出來。

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例11

10?The

sum

from

1

to

10

is

55.?1秒64M0測試用例210

15?The

sum

from

10

to

15

is

75.?1秒64M0int

sum(int

m,int

n)

{if(m==n)

return

m;int

i;for(i=n;i>=m;i--)

return

i+sum(m,i-1);}

#include

<stdio.h>

int

main(){int

m,n,s=0;scanf("%d%d",&m,&n);s=sum(m,n);

printf("The

sum

from

%d

to

%d

is

%d.\n",m,n,s);return

0;}

50.【中學(xué)】求最大公約數(shù)——遞歸成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月請使用遞歸算法計(jì)算正整數(shù)n和m的最大公約數(shù)GCD(n,m)。

=m

當(dāng)m<=n且nmodm=0

GCD(N,M)=GCD(m,n)

當(dāng)n<m時(shí)

=GCD(m,nmodm)

其他輸入:n和m輸出:

n和m的最大公約數(shù)

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例124

48?24?1秒64M0測試用例213

15?1?1秒64M0#include

<stdio.h>

int

f(int

x,int

y)

{int

s,t;t=x%y;

if(t==0)

s=y;else

s=f(y,t);

return

s;}

int

main()

{int

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

printf("%d\n",f(m,n));return

0;}51.【數(shù)列遞歸】求序列之和——遞歸成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月請使用遞歸算法求序列1+1/2-1/3+1/4

-1/5......的前n項(xiàng)之和。輸入:n輸出:序列的前n項(xiàng)和(精確到小數(shù)點(diǎn)之后第6位)

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例11?1?1秒64M0測試用例22?1.500000?1秒64M0測試用例33?1.166667?1秒64M0#include<stdio.h>

float

sum(int

n)

{float

s;if(n==1)

s=1.0;

else

if(n%2==0)

s=sum(n-1)+1.0/n;

else

s=sum(n-1)-1.0/n;return

s;}

int

main()

{int

n;float

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

if(n==1)

printf("1\n");

else

{s=sum(n);printf("%.6f\n",s);}}

52.【大學(xué)】函數(shù)遞歸*成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月編寫一個(gè)函數(shù),使用遞歸算法求滿足下述定義的整數(shù)序列的第n項(xiàng)。1當(dāng)n>=0且n<=4時(shí)f(n)=f(n-1)+f(n-3)當(dāng)n>4且n為偶數(shù)時(shí)f(n-2)+f(n-4)當(dāng)n>4且n為奇數(shù)時(shí)-1其他函數(shù)原型如下:intfindf(intn);參數(shù)說明:n項(xiàng)數(shù);返回值是第n項(xiàng)值。例如輸入:10,輸出:8預(yù)設(shè)代碼前置代碼/*

PRESET

CODE

BEGIN

-

NEVER

TOUCH

CODE

BELOW

*/

#include

<stdio.h>

int

main()

{

int

n,s,

findf(

int

);

scanf("%d",

&n);

s

=

findf(n);

printf("%d\n",

s);

return

0;

}

/*

PRESET

CODE

END

-

NEVER

TOUCH

CODE

ABOVE

*/

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例110?8?1秒64M0int

findf(int

n)

{if(n>=0&&n<=4)

return

1;if(n<0)

return

-1;

if(n>4&&n%2==0)

return

findf(n-1)+findf(n-3);

if(n>4&&n%2==1)

return

findf(n-2)+findf(n-4);}

53.【大學(xué)遞歸】求解平方根成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月小明上了大學(xué),學(xué)習(xí)了用求解平方根的迭代公式。其中:p為x的近似平方根,e是結(jié)果允許的誤差。輸入:x,e輸出:p

保留小數(shù)點(diǎn)后8位。#include<stdio.h>

#include<math.h>

float

f(float

x,float

p,float

e)

{if(fabs(p*p-x)<e)

return

p;

else

return

f(x,(p+x/p)/2,e);}

int

main()

{float

p,e,x;scanf("%f%f",&x,&e);

p=f(x,x,e);printf("%.8f\n",p);return

0;}

H12:安全的密碼(選做)成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月隨著電子設(shè)備的廣泛運(yùn)用,密碼也漸漸融入每個(gè)人的生活。保護(hù)好密碼,不僅關(guān)系到個(gè)人隱私,更關(guān)系到個(gè)人的財(cái)產(chǎn)和安全。一個(gè)安全的密碼,最好由大小寫字母、數(shù)字或符號組成。包含越多種類的字符,其安全性就越高。同時(shí)密碼還需要有一定的長度,通常至少要由六個(gè)以上的字符組成。并不是每個(gè)人都喜歡這樣復(fù)雜的密碼,很多人在設(shè)置密碼的時(shí)候,喜歡使用自己的名字或者生日,但這是很大的安全隱患。任務(wù)林曉煒正在設(shè)計(jì)一個(gè)網(wǎng)絡(luò)交易系統(tǒng),為了保證用戶的密碼安全,他需要一個(gè)程序,判斷用戶自己設(shè)置的密碼是否安全,如果不安全,則給出提示?,F(xiàn)在他向你求助,請你幫忙設(shè)計(jì)一個(gè)程序來解決這個(gè)問題。應(yīng)當(dāng)按照以下的規(guī)則來判斷密碼是否安全:如果密碼長度小于6位,則不安全;如果組成密碼的字符只有一類,則不安全;如果組成密碼的字符有兩類,則為中度安全;如果組成密碼的字符有三類或以上,則為安全通常,可以認(rèn)為數(shù)字、大寫字母、小寫字母和其它符號為四類不同的字符。輸入輸入的第一行是一個(gè)整數(shù)N,表明后面有多少組密碼。隨后的N行輸入包括N個(gè)密碼,每個(gè)密碼的長度均小于20個(gè)字符。輸出針對每一個(gè)密碼判斷并輸出它是否安全。對于不安全的密碼輸出"NotSafe",對于中度安全的密碼輸出"MediumSafe",對于安全的密碼輸出"Safe"輸入樣例4

1234

abcdef

ABC123

1#c3Gh輸出樣例NotSafe

NotSafe

Medium

SafeSafe

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例110?abcDEF?ABC?qw?`?ABCDEFGHIJKLMNOPQRST?12345678901234567890?

1aB?1

B?a

X

?qwe123%^&ABC?Medium

Safe?Not

Safe?Not

Safe?Not

Safe?Not

Safe?Not

Safe?Safe?Not

Safe?Safe?Safe?1秒64M0#include

<stdio.h>

#include

<string.h>

int

main(void)

{int

n,i,j,x,m,b[4];char

a[100];scanf("%d",&n);

for

(i=1;i<=n;i++){gets(a);if

(i==1)

gets(a);x=strlen(a);

if

(x<6)

{printf("Not

Safe\n");continue;}

b[0]=0;b[1]=0;b[2]=0;b[3]=0;for

(j=0;j<=x-1;j++)

{if

(48<=a[j]&&a[j]<=57)

b[0]=1;

else

if

(65<=a[j]&&a[j]<=91)

b[1]=1;

else

if

(97<=a[j]&&a[j]<=123)

b[2]=1;else

b[3]=1;

if

(a[0]+a[1]+a[2]+a[3]==4)

break;}m=b[0]+b[1]+b[2]+b[3];

switch

(m)

{case

1:printf("Not

Safe\n");break;case

2:printf("Medium

Safe\n");break;

case

3:printf("Safe\n");break;case

4:printf("Safe\n");}}return

0;}H13:編碼問題(選作)成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月

設(shè)有一個(gè)整形數(shù)組A[0..N-1];存放的元素為0~N-1(1<N<=10)之間的整數(shù),且A[i]≠A[j](i≠j)。例如,當(dāng)N=6時(shí),有:A=(4,3,0,5,1,2)。此時(shí),數(shù)組A的編碼定義如下:A[0]編碼為0;A[i]編碼為:在A[0],A[1],…,A[i-1]中比A[i]的值小的個(gè)數(shù)(i=1,2,…,N-1)

例如上面數(shù)組A的編碼為:B=(0,0,0,3,1,2)

若給出數(shù)組A,則可求出其編碼。同理,若給出數(shù)組A的編碼,可求出A中的原數(shù)據(jù)。輸入:推導(dǎo)方向(取值為1或2,如為1,則表示根據(jù)數(shù)組求數(shù)組編碼;如為2,則表示根據(jù)編碼反求數(shù)組)數(shù)組個(gè)數(shù)

數(shù)組或數(shù)組編碼元素輸出:數(shù)組編碼、或數(shù)組本身(元素之間以空格分隔)

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例11?6?4

3

0

5

1

2?0

0

0

3

1

2?1秒64M0測試用例21?8?1

0

3

2

5

6

7

4?0

0

2

2

4

5

6

4?1秒64M0測試用例42?6?0

0

2

3

1

3?2

0

4

5

1

3?1秒64M0#include<stdio.h>

int

main()

{int

mode,n,i,j,s,a[100],b[100];

static

int

c[100];

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

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

scanf("%d",

&a[i]);

if(mode==1){for(i=1,b[0]=0;i<n;i++)

for(j=0,b[i]=0;j<i;j++)if(a[i]>a[j])

b[i]++;}

else

{for(i=n-1;i>=0;i--){for(j=0,s=0;s<a[i]+1;j++)

if

(c[j]==0)

s++;b[i]=j-1;c[b[i]]=1;}}

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

printf("%d

",b[i]);

printf("%d\n",b[n-1]);return

0;}54.回文字符串——遞歸(請使用遞歸算法實(shí)現(xiàn)。)成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月

有一種特殊形式的字符串,其正反序相同,被稱為“回文字符串”。例如LeveL就是一個(gè)回文字符串。輸入:字符串輸出:Yes或者No說明:如輸出Yes,說明輸入的字符串是一個(gè)回文字符串。輸出No,說明輸入的字符串不是一個(gè)回文字符串

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例1LeveL?Yes?1秒64M0測試用例10?Yes?1秒64M0#include

<stdio.h>

#include

<string.h>

int

f(char

x,char

y)

{int

p=x==y;return

p;}

int

main(){char

a[500];int

i,j=1,k;fgets(a,500,stdin);k=strlen(a)-1;if(k==0)

printf("Yes\n");

else

{for(i=0;i<=k/2;i++)

j*=f(a[i],a[k-1-i]);

if(j==1)

printf("Yes\n");else

printf("No\n");}}55.子串反向——遞歸成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月請編寫一個(gè)遞歸函數(shù)reverse(charstr[],intstart,intend),該函數(shù)的功能是將串str中下標(biāo)從start開始到end結(jié)束的字符顛倒順序。假設(shè)start和end都在合理的取值范圍。例如:執(zhí)行前:str[]="0123456";start=1;end=4執(zhí)行后:strr[]="0432156"要求在該函數(shù)中不使用新的數(shù)組,沒有循環(huán)。注意:只需要編寫遞歸函數(shù)reverse,系統(tǒng)中已經(jīng)設(shè)置好了main函數(shù)。預(yù)設(shè)代碼前置代碼/*

PRESET

CODE

BEGIN

-

NEVER

TOUCH

CODE

BELOW

*/

#include

<stdio.h>

#include

<stdlib.h>

void

reverse(

);

int

main(

)

{

char

str[100];

int

start,

end;

gets(str);

scanf("%d%d",

&start,

&end);

reverse(

str,

start,

end

);

printf("%s\n",

str);

return

0;

}

/*

PRESET

CODE

END

-

NEVER

TOUCH

CODE

ABOVE

*/

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例10123456?1

4?0432156?1秒64M0測試用例60123456?6

10?0123456?1秒64M0測試用例70123456?0

10?6543210?1秒64M0#include<string.h>

void

reverse(char

str[],int

start,int

end)

{char

t;if(end>=strlen(str))

reverse(str,start,end-1);

else

if(start<end)

{t=str[start];str[start]=str[end];str[end]=t;

reverse(str,start+1,end-1);}}

56.【字符】單詞排序成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交是關(guān)閉時(shí)間2014年06月輸入5個(gè)單詞,將它們按從大到小的順序排列后輸出。輸入:5個(gè)單詞輸出:排序后的順序

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例1BASIC?C++?Pascal?C?Fortran?Pascal?Fortran?C++?C?BASIC?1秒64M0#include<stdio.h>

#include<string.h>

int

main(){char

ch[5][26],c[26];int

i,j,k;

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

gets(ch[i]);

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

{k=i;for(j=i+1;j<5;j++)

if(strcmp(ch[k],ch[j])<0)

k=j;

if(k!=i)

{strcpy(c,ch[i]);strcpy(ch[i],ch[k]);strcpy(ch[k],c);}}

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

puts(ch[i]);}

57.【日期】車輛限行成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月

2012年4月1日,北京是人民政府根據(jù)《中華人民共和國道路交通安全法》和《北京市實(shí)施〈中華人民共和國大氣污染防治法〉辦法》有關(guān)規(guī)定,自2012年4月11日起,繼續(xù)對機(jī)動(dòng)車實(shí)施按車牌尾號工作日高峰時(shí)段區(qū)域限行交通管理措施。

根據(jù)規(guī)定,按車牌尾號限行的機(jī)動(dòng)車車牌尾號分為五組,每13周輪換一次限行日,分別為:

(1)自2012年4月9日至2012年7月7日,星期一至星期五限行機(jī)動(dòng)車車牌尾號分別為:3和8、4和9、5和0、1和6、2和7(含臨時(shí)號牌,機(jī)動(dòng)車車牌尾號為英文字母的按0號管理,下同);

(2)自2012年7月8日至2012年10月6日,星期一至星期五限行機(jī)動(dòng)車車牌尾號分別為:2和7、3和8、4和9、5和0、1和6;

(3)自2012年10月7日至2013年1月5日,星期一至星期五限行機(jī)動(dòng)車車牌尾號分別為:1和6、2和7現(xiàn)給出2012年4月9日之后的任意日期,如果不考慮國家統(tǒng)一的公假,只考慮日期一個(gè)因素,請計(jì)算指定日期要限行的車牌尾號。(政府的公告確實(shí)有點(diǎn)意思,在時(shí)間銜接上和限號安排上公告(/GB/14748/17574443.html)與公告(/gzdt/2013-04/02/content_2367908.htm)之間有重疊,顯然,后面的公告是覆蓋前面的公告的,我們計(jì)算的時(shí)候,只能是“理論”上的事情,咱嚴(yán)格按照從2012年4月9日星期一開始,每13周進(jìn)行一次輪換計(jì)算就可以了。)

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例12012

7

9?2

and

7.?無限制64M0測試用例22012

7

12?5

and

0.?無限制64M0測試用例32012

7

14?Free.?無限制64M0測試用例52013

4

11?2

and

7.?無限制64M0測試用例62014

4

4?5

and

0.?無限制64M0測試用例92014

3

31?1

and

6.?無限制64M0#include<stdio.h>

int

leap_year(int);int

year_days(int);int

days(int,int,int);

int

leap_year(int

year)

{return

((year%4==0&&year%100!=0)||year%400==0)?1:0;}

int

year_days(int

year)

{return

leap_year(year)?366:365;}

int

days(int

year,int

month,int

day)

{int

months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},i;

if(leap_year(year)&&month>2)

day++;

for

(i=1;i<month;i++)

day+=months[i];

return

day;}

int

main()

{int

a,b,c,i,d=0,m;scanf("%d%d%d",&a,&b,&c);

for

(i=2012;i<a;i++)

d+=year_days(i);

d+=days(a,b,c)-days(2012,4,9);m=(d/91)%5;

switch(m)

{case

0:switch((d%91)%7)

{case

0:printf("3

and

8.\n");break;

case

1:printf("4

and

9.\n");break;

case

2:printf("5

and

0.\n");break;

case

3:printf("1

and

6.\n");break;

case

4:printf("2

and

7.\n");break;

case

5:printf("Free.\n");break;

case

6:printf("Free.\n");break;};break;

case

1:switch((d%91)%7)

{case

0:printf("2

and

7.\n");break;

case

1:printf("3

and

8.\n");break;

case

2:printf("4

and

9.\n");break;

case

3:printf("5

and

0.\n");break;

case

4:printf("1

and

6.\n");break;

case

5:printf("Free.\n");break;

case

6:printf("Free.\n");break;};break;

case

2:switch((d%91)%7)

{case

0:printf("1

and

6.\n");break;

case

1:printf("2

and

7.\n");break;

case

2:printf("3

and

8.\n");break;

case

3:printf("4

and

9.\n");break;

case

4:printf("5

and

0.\n");break;

case

5:printf("Free.\n");break;

case

6:printf("Free.\n");break;};break;

case

3:switch((d%91)%7)

{case

0:printf("5

and

0.\n");break;

case

1:printf("1

and

6.\n");break;

case

2:printf("2

and

7.\n");break;

case

3:printf("3

and

8.\n");break;

case

4:printf("4

and

9.\n");break;

case

5:printf("Free.\n");break;

case

6:printf("Free.\n");break;};break;

case

4:switch((d%91)%7)

{case

0:printf("4

and

9.\n");break;

case

1:printf("5

and

0.\n");break;

case

2:printf("1

and

6.\n");break;

case

3:printf("2

and

7.\n");break;

case

4:printf("3

and

8.\n");break;

case

5:printf("Free.\n");break;

case

6:printf("Free.\n");break;};break;}

return

0;}

58.縮寫展開成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交是關(guān)閉時(shí)間2014年06月在保存字符串時(shí),對出現(xiàn)在連續(xù)位置的若干個(gè)字符,如這些字符在ASCII表中也是連續(xù)出現(xiàn),則可以將這些字符使用縮寫形式進(jìn)行保存,以節(jié)省保存空間。例如用A-Z表示ABCD...XYZ,1-5表示12345,c-f表示cdef。輸入:包含縮寫形式的字符串輸出:將縮寫形式進(jìn)行還原后的字符串說明:只處理大小寫字母和數(shù)字,即對于形如A-9,a-C這樣的縮寫不進(jìn)行處理

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例10-9?0123456789?1秒64M0測試用例2a-z?abcdefghijklmnopqrstuvwxyz?1秒64M0測試用例3G-I?GHI?1秒64M0測試用例4ABDG-K035-9abd-h?ABDGHIJK0356789abdefgh?1秒64M0測試用例52-9a0-77cbdj?23456789a012345677cbdj?1秒64M0測試用例6asasdasdasdasdA-H987?asasdasdasdasdABCDEFGH987?1秒64M0測試用例7A-9A-0c-80-A9-0z-aZ-A?A-9A-0c-80-A9-0z-aZ-A?1秒64M0測試用例8abcdef

ghi

jkl

mn?abcdef

ghi

jkl

mn?1秒64M0測試用例91.asjfdhlkdsa-7812389=-ert=9-1,..;[[]1`=-=43?1.asjfdhlkdsa-7812389=-ert=9-1,..;[[]1`=-=43?1秒64M0測試用例101.A-Z?1.ABCDEFGHIJKLMNOPQRSTUVWXYZ?1秒64M0測試用例111-1?1-1?1秒64M0#include<stdio.h>

#include<string.h>

int

main(){char

a[200];int

i,j;fgets(a,200,stdin);

for(i=0;i<strlen(a);i++)

if(a[i]=='-'){if(a[i-1]==a[i+1])

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

else

if(a[i-1]>='A'&&a[i+1]<='Z'&&a[i-1]<a[i+1])

for(j=a[i-1]+1;j<=a[i+1]-1;j++)

printf("%c",j);

else

if(a[i-1]>='a'&&a[i+1]<='z'&&a[i-1]<a[i+1])

for(j=a[i-1]+1;j<=a[i+1]-1;j++)

printf("%c",j);

else

if(a[i-1]>='0'&&a[i+1]<='9'&&a[i-1]<a[i+1])

for(j=a[i-1]+1;j<=a[i+1]-1;j++)

printf("%c",j);

else

printf("%c",a[i]);}else

printf("%c",a[i]);}

H14:洗牌(選作)成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月

假設(shè)我們有2n張牌,它們以1,2,...,n,n+1,...,2n編號并在開始時(shí)保持著這種順序。一次洗牌就是將牌原來的次序變?yōu)閚+1,1,n+2,2,...,2n,n,也就是將原來的前n張牌放到位置2,4,...,2n,并且將余下的n張牌按照他們原來的次序放到奇數(shù)位置1,3,...,2n-1。已經(jīng)證明對于任何一個(gè)自然數(shù)n,這2n張牌經(jīng)過一定次數(shù)的洗牌就回到原來的次序。但我們不知道對于一個(gè)特定的n,需要幾次洗牌才能將牌洗回原來的次序。輸入:牌張數(shù)的一半n,即初始情況下一共有2n張牌,n為int型整數(shù)輸出:將牌洗回原來的次序所需要的洗牌次數(shù)

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例110?6?1秒64M0測試用例220?20?1秒64M0測試用例33?3?1秒64M0測試用例430?60?1秒64M0測試用例51?2?1秒64M0測試用例610000?812?1秒64M0測試用例74500?2250?1秒64M0#include

<stdio.h>

int

main(void)

{int

n,x,total=1;scanf("%d",&n);x=2;

while

(x!=1){if

(x<=n)

x=x*2;

else

x=2*(x-n)-1;

total=total+1;}

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

0;}H15:高精度加減法(選作)成績10開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交否關(guān)閉時(shí)間2014年06月背景:計(jì)算機(jī)所能完成的一個(gè)基本功能就是完成數(shù)據(jù)的計(jì)算,譬如加法、減法等等。但是在任何一種計(jì)算機(jī)上,計(jì)算中能夠使用的數(shù)字都是有一定范圍的,超過了范圍,就沒法得到精確的結(jié)果。你現(xiàn)在接受了一個(gè)任務(wù),要編寫一個(gè)高精度計(jì)算器的核心部分。所謂高精度計(jì)算器,就是可以計(jì)算很大很大的數(shù)據(jù)的計(jì)算器。輸入:輸入的第一行是一個(gè)正整數(shù),表示下面有幾組數(shù)據(jù)需要計(jì)算。之后的每一行是兩個(gè)十進(jìn)制的正整數(shù)和一個(gè)運(yùn)算符,每個(gè)整數(shù)可以由最多500個(gè)數(shù)字組成。運(yùn)算符可以是加號或者減號。輸出:對應(yīng)著輸入的每一行數(shù)據(jù),輸出計(jì)算的結(jié)果,每個(gè)結(jié)果占一行。

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例12?213914+23466123?32862934-23481243?23680037?9381691?1秒64M0測試用例21.3?2.483291674192731231+1236187236812735123?3.123129678463287562378-28935687264871236?4.999999999+1?1.1719478911005466354?2.123100742776022691142?3.1000000000?1秒64M0測試用例311?56789+56789?45555+44445?1+12345?12345+1?98765-98760?12345-9876?12345-12345?12345-12346?1-54321?0-0?0+0?113578?90000?12346?12346?5?2469?0?-1?-54320?0?0?1秒64M0#include<stdio.h>

#include<string.h>

void

main()

{char

z,sign,

a[1010];int

n,

i,

j,

f,

x,

b[1010],

c[1010];

void

add(int

b[1010],int

c[1010],int

f);void

sub(int

b[1010],int

c[1010],int

f);

scanf(

"%d%c",

&n,

&z

);

for(;n>0;n--,printf("\n")

)

{

gets(a);x=strlen(a);

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

b[i]=c[i]=0;

for(i=x-1,j=0;'0'<=a[i]&&a[i]<='9';i--,j++)

c[j]=a[i]-'0';

f=j;sign=a[i];

for(i--,j=0;i>=0;i--,j++)

b[j]=a[i]-'0';

if(f<j)

f=j;

if(

sign=='+')

add(b,c,f);

else

sub(b,c,f);}}

void

add(int

b[1010],

int

c[1010],

int

f)

{int

i,r,d[1010];

for(i=0,r=0;i<f;i++)

{d[i]=(b[i]+c[i]+r)%10;

r=(b[i]+c[i]+r)/10;}

if(r==1)

printf("1");

for(

i--;

i>=0;

i--)

printf("%d",

d[i]);}

void

sub(

int

b[1010],

int

c[1010],

int

f)

{int

i,r,flag,

d[1010];

for(i=f-1,flag=1;i>=0;i--)

{if(b[i]>c[i])

{flag=1;break;}

else

if(b[i]<c[i])

{flag=-1;break;}}

if(flag==1)

{for(i=0,r=0;i<f;i++)

{d[i]=b[i]-c[i]+r;

if(d[i]<0)

{d[i]=d[i]+10;r=-1;}

else

r=0;}}

if(flag==-1)

{printf("-");

for(i=0,r=0;i<f;i++)

{d[i]=c[i]-b[i]+r;

if(d[i]<0)

{d[i]=d[i]+10;r=-1;}

else

r=0;}}

for(i--;d[i]==0&&i>0;i--)

;

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

printf("%d",

d[i]);}H16:拱豬計(jì)分(選作)成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年05月允許遲交是關(guān)閉時(shí)間2014年06月背景:拱豬是一種很有趣的撲克牌游戲。即使你不知道它的玩法,你也可以由它的計(jì)分方式來了解它的趣味性。假設(shè)在此我們僅考慮四個(gè)人的拱豬牌局,本題要求你根據(jù)下面的計(jì)分規(guī)則,在牌局結(jié)束時(shí)計(jì)算四位玩家所得分?jǐn)?shù)。我們分別以S、H、D及C來代表黑桃,紅心,方塊及梅花,并以數(shù)字1至13來代表A、2、…、Q、K等牌點(diǎn),例如:H1為紅心A,S13為黑桃K。牌局結(jié)束時(shí),由各玩家持有的有關(guān)計(jì)分的牌(計(jì)分牌)僅有S12(豬),所有紅心牌,D11(羊)及C10(加倍)等16張牌。其它牌均棄置不計(jì)。若未持有這16張牌之任一張則以得零分計(jì)算。若持有C10的玩家只有該張牌而沒有任何其它牌則得+50分,若除了C10還有其它計(jì)分牌,則將其它計(jì)分牌所得分?jǐn)?shù)加倍計(jì)算。若紅心牌不在同一家,則H1至H13等13張牌均以負(fù)分計(jì),其數(shù)值為-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40。而且S12與D11分別以-100及+100分計(jì)算。若紅心牌H1至H13均在同一家,有下列情形:所有紅心牌以+200分計(jì)算。若S12、D11皆在吃下所有紅心牌之一家,則此玩家得+500分。而C10還是以前面所述原則計(jì)算之。例一:若各玩家持有計(jì)分牌如下:(每列代表一玩家所持有之牌)S12H3H5H13

D11H8H9

C10H1H2H4H6H7

H10H11H12則各家之得分依序?yàn)椋?148、+83、-138及-60。例二:若各玩家持有計(jì)分牌如下:(第四家未持有任何計(jì)分牌)H1H2H3H4H5H6H7H8H9H10H11H12H13

S12C10

D11則各家之得分依序?yàn)椋?200、-200、+100及0。例三:若有一玩家持有所有16張計(jì)分牌,則得+1000分。其余三家均得零分。輸入:

每個(gè)輸入文件由多組測試數(shù)據(jù)構(gòu)成,每組測試數(shù)據(jù)有四行,每一行第一個(gè)數(shù)為該玩家所持有計(jì)分牌總數(shù),而后列出其所持有之所有計(jì)分牌,牌數(shù)與各計(jì)分牌均以一個(gè)以上的空格分開。相鄰兩組測試數(shù)據(jù)之間不會(huì)有空白行,讀到四家持牌數(shù)都為0表示文件結(jié)束。輸出:

每一行輸出一組測試數(shù)據(jù)對應(yīng)的結(jié)果,依次輸出各家所得分?jǐn)?shù),共四個(gè)整數(shù)(含正負(fù)號,0除外),相鄰兩個(gè)整數(shù)之間以一個(gè)空格分開,符號和數(shù)字間不可以有空格。每組輸出間不需要有空白行。

測試輸入期待的輸出時(shí)間限制內(nèi)存限制額外進(jìn)程測試用例14

S12

H3

H5

H13?3

D11

H8

H9?6

C10

H1

H2

H4

H6

H7?3

H10

H11

H12?13

H1

H2

H3

H4

H5

H6

H7

H8

H9

H10

H11

H12

H13?2

S12

C10?1

D11?0?0?0?0?0?-148

+83

-138

-60?+200

-200

+100

0?1秒64M0#include

<stdio.h>

int

myinput(int

card[],int

number[])

{int

i,n;char

s[5];

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

{scanf("%d",&n);number[i]=n;

while(n--)

{scanf("%s",s);

switch(s[0])

{case

'S':card[13]=i;break;

case

'D':card[14]=i;break;

case

'C':card[15]=i;break;

case

'H':s[2]=='\0'?(card[s[1]-'1']=i):(card[s[2]-'1'+10]=i);}}}

return

number[0]+number[1]+number[2]+number[3];}

int

main()

{int

value[15]={-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40,-100,100},card[16],

score[4]={0,0,0,0},number[4],i,s,

input();

while(myinput(card,number))

{for(i=0,s=0;i<13;i++)

s+=card[i];

if(s%13)

{for(i=0;i<15;i++)

score[card[i]]+=value[i];}

else

{if(card[0]==card[13]&&card[13]==card[14])

score[card[0]]+=500;

else

{score[card[0]]+=200;

score[card[14]]+=value[14];

score[card[13]]+=value[13];}}

score[card[15]]+=number[card[15]]==1?50:score[card[15]];

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

printf("%s%d%s",score[i]>0?"+":"",score[i],i==3?"\n":"

");

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

score[i]=0;}

return

0;}59.【大學(xué)】恭喜發(fā)財(cái)利是竇來成績5開啟時(shí)間2014年05月折扣0.8折扣時(shí)間2014年06月允許遲交否關(guān)閉時(shí)間2014年06月在中國,過春節(jié)時(shí)人們有給孩子壓歲錢(粵語稱為利是)的習(xí)俗。最早的壓歲錢出現(xiàn)于漢代,又叫壓勝錢,并不在市面上流通,而是鑄成錢幣形式的玩賞物,有避邪的功能。錢幣正面一般鑄有“萬歲千秋”、“去殃除兇”等吉祥話和龍鳳、龜蛇、雙魚等吉祥圖案。據(jù)說嘉興府有一戶姓管的人家,夫妻老年得子,十分珍愛。在年三十晚上,為防止“祟”來侵?jǐn)_一直逗孩子玩,小孩用紅紙包了八枚銅錢,包了又拆,拆了又包,睡下以后,包著的八枚銅錢就放在枕邊。半夜里,一陣陰風(fēng)吹過,黑矮的小人正要用他的白手摸孩子的頭,突然孩子枕邊迸出一道金光,祟尖叫著逃跑了。于是這件事傳揚(yáng)開來,大家紛紛效仿,在大年夜用紅紙包上錢給孩子,祟就不敢再來侵?jǐn)_了。因而人們把這種錢叫“壓祟錢”,“祟”與“歲”發(fā)音相同,日久天長,就被稱為“壓歲錢”了。現(xiàn)在有N個(gè)人,他們都有小孩,春節(jié)來了,他們要發(fā)壓歲錢給朋友的小孩,而他們自己的小孩也會(huì)收到壓歲錢。為了簡單,他們在發(fā)壓歲錢的時(shí)候,使用以下的計(jì)算方法,譬如某甲有100塊,它要給另外三個(gè)人的小孩發(fā)壓歲錢,則每個(gè)小孩會(huì)分到100/3=33塊,剩余的1塊就不發(fā)了。給你這N個(gè)人的信息,以及他們把壓歲錢發(fā)給了誰的小孩,請你計(jì)算他們每個(gè)人的小孩收到的壓歲錢和他們發(fā)出去的壓歲錢的差額是多少。輸入第1行:一個(gè)整數(shù)N(2<=N<=10)第2..N+1行:每行是一個(gè)人名,每個(gè)名字不超過14個(gè)字符第N+2..結(jié)束:N組按照以下規(guī)則組織的數(shù)據(jù):組中的第一行為送出壓歲錢的人名。第二行包括兩個(gè)數(shù)字,第一個(gè)是該人有多少錢(0~2000),第二個(gè)是它要把錢發(fā)給幾個(gè)人的小孩,用NGi表示(0≤NGi≤N-1).如果NGi為非零,則下面的NGi行會(huì)列出接受壓歲錢的人的名字。輸入樣例5

dave

laura

owen

vick

amr

dave

2003

laura

owen

vick

owen

5001

dave

amr

1502

vick

owen

laura

02

amr

vick

vick

00輸出格式輸出為N行,每行上是一個(gè)人名與它收到和送出的壓歲錢之差額,這兩項(xiàng)之間有一個(gè)空格。這N行的順序應(yīng)該和輸入中

溫馨提示

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

評論

0/150

提交評論