ACM題庫(kù)完整版課件_第1頁
ACM題庫(kù)完整版課件_第2頁
ACM題庫(kù)完整版課件_第3頁
ACM題庫(kù)完整版課件_第4頁
ACM題庫(kù)完整版課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

二項(xiàng)式系數(shù)

1.題目描述

二項(xiàng)式系數(shù)C(n,k)因它在組合數(shù)學(xué)中的重要性而被廣泛地研究。二項(xiàng)式系數(shù)可以如下遞歸的定義:

C(1,0)=C(1,1)=1;

C(n,0)=1對(duì)于所有n>0;

C(n,k)=C(n?1,k?1)+C(n?1,k)對(duì)于所有0<k≤n。

給出n和k,你要確定C(n,k)的奇偶性。

2.輸入

輸入包含多組測(cè)試數(shù)據(jù)。每組測(cè)試數(shù)據(jù)一對(duì)整數(shù)n和k(0≤k≤n<231),占據(jù)獨(dú)立一行。

文件結(jié)束符(EOF)表示輸入結(jié)束。

3.輸出

對(duì)每組測(cè)試數(shù)據(jù),輸出一行,包含一個(gè)“0”或一個(gè)“1”,即C(n,k)除以2的余數(shù)。

4.樣例輸入

11

10

21

5.樣例輸出

1

1

0#include<stdio.h>int

fib(int

n,intk){

if(n==1&&(k<2)) return1; elseif(k==0) return1; else returnfib(n-1,k-1)+fib(n-1,k);}intmain(){

int

n,k;

while(scanf("%d%d",&n,&k)!=EOF) { printf("%d\n",fib(n,k)%2); } return0;}構(gòu)造新的模運(yùn)算1.題目描述給定整數(shù)a,b,n,要求計(jì)算(a^b)modn2.輸入多組數(shù)據(jù),每組數(shù)據(jù)一行,為三個(gè)用空格隔開的整數(shù)a,b,n1<=a<=40,0<=b<=3,1<=n<=5003.輸出每組數(shù)據(jù)輸出一行,為所求值4.樣例輸入2352245.樣例輸出30#include<stdio.h>#include<math.h>intmain(){答案有錯(cuò)

int

a,b,n;

while(scanf("%d%d%d\n",&a,&b,&n)!=EOF) {

printf("%d\n",(int)(pow(a,b))%n); } return0;}計(jì)算績(jī)點(diǎn)1.題目描述學(xué)校對(duì)本科生的成績(jī)施行平均學(xué)分績(jī)點(diǎn)制(GPA)。將學(xué)生的實(shí)際考分根據(jù)不同的學(xué)科的不同學(xué)分按一定的公式進(jìn)行計(jì)算。曾經(jīng)使用的規(guī)定如下:實(shí)際成績(jī)績(jī)點(diǎn)90-1004.085-893.782-843.378-813.075-772.772-742.368-712.064-671.560-631.060以下01.一門課程的學(xué)分績(jī)點(diǎn)=該課績(jī)點(diǎn)*該課學(xué)分2.總評(píng)績(jī)點(diǎn)=所有學(xué)科績(jī)點(diǎn)之和/所有課程學(xué)分之和現(xiàn)要求你編寫程序求出某人A的總評(píng)績(jī)點(diǎn)(GPA)。2.輸入第一行總的課程數(shù)n(n<10);第二行相應(yīng)課程的學(xué)分(兩個(gè)學(xué)分間用空格隔開);第三行對(duì)應(yīng)課程的實(shí)際得分;此處輸入的所有數(shù)字均為整數(shù)。3.輸出輸出有一行,總評(píng)績(jī)點(diǎn),精確到小數(shù)點(diǎn)后2位小數(shù)。(printf("%.2f",GPA);)5.樣例輸入54342391887269566.樣例輸出2.52#include<stdio.h>#include<math.h>intmain(){

int

n,i; floata[10],c[10],b[10],sum=0,GPA,d;

scanf("%d",&n);

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

scanf("%f",&a[i]);

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

scanf("%f",&b[i]);

if(b[i]>=90)

c[i]=4.0; elseif(b[i]>=85)

c[i]=3.7; elseif(b[i]>=82)

c[i]=3.3; elseif(b[i]>=78)

c[i]=3.0; elseif(b[i]>=72)

c[i]=2.3; elseif(b[i]>=68)

c[i]=2.0; elseif(b[i]>=64)

c[i]=1.5; elseif(b[i]>=60)

c[i]=1.0; elseb[i]=0; }

for(i=0;i<=n-1;i++) sum+=a[i]*c[i];

for(i=0;i<=n-1;i++) d+=a[i]; GPA=sum/d; printf("%.2f",GPA); return0;}

將字符串中的小寫字母轉(zhuǎn)換成大寫字母1.題目描述給定一個(gè)字符串,將其中所有的小寫字母轉(zhuǎn)換成大寫字母2.輸入一個(gè)字符串3.輸出將輸入的字符串中所有小寫字母轉(zhuǎn)換成大寫字母后的字符串4.樣例輸入helloworld123Ha5.樣例輸出HELLOWORLD123HA#include<stdio.h>#defineN100intmain(){

inti; charc,str[N];

gets(str); i=0;

while(str[i]!='\0') {

if(str[i]>='a'&&str[i]<='z') {

str[i]=str[i]-32; } i++; }

puts(str); return0;}日歷問題

1.題目描述在我們現(xiàn)在使用的日歷中,閏年被定義為能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它們不是閏年。例如:1700,1800,1900和2100不是閏年,而1600,2000和2400是閏年。給定從公元2000年1月1日開始逝去的天數(shù),你的任務(wù)是給出這一天是哪年哪月哪日星期幾。2.輸入輸入包含若干行,每行包含一個(gè)正整數(shù),表示從2000年1月1日開始逝去的天數(shù)。輸入最后一行是?1,不必處理??梢约僭O(shè)結(jié)果的年份不會(huì)超過9999。3.輸出對(duì)每個(gè)測(cè)試樣例,輸出一行,該行包含對(duì)應(yīng)的日期和星期幾。格式為“YYYY-MM-DDDayOfWeek”,其中“DayOfWeek”必須是下面中的一個(gè):"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"或"Saturday“。4.樣例輸入1730174017501751-15.樣例輸出2004-09-26Sunday2004-10-06Wednesday2004-10-16Saturday2004-10-17Sunday6.提示2000.1.1.是星期六#include<stdio.h>int

type(int);charweek[7][10]={"saturday","sunday","monday","tuesday","wednesday","thursday","friday"};intyear[2]={365,366};intmonth[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};int

main(void){

int

days,dayofweek;

inti=0,j=0;

while(scanf("%d",&days)&&days!=-1) {

dayofweek=days%7;

for(i=2000;days>=year[type(i)];i++) days-=year[type(i)];

for(j=0;days>=month[type(i)][j];j++) days-=month[type(i)][j]; printf("%d-%02d-%02d%s\n",i,j+1,days+1,week[dayofweek]); } return0;}int

type(intm){ if(m%4!=0||(m%100==0&&m%400!=0)) return0; else return1;}求平均年齡1.題目描述班上有學(xué)生若干名,給出每名學(xué)生的年齡(整數(shù)),求班上所有學(xué)生的平均年齡,保留到小數(shù)點(diǎn)后兩位2.輸入第一行有一個(gè)整數(shù)n(1<=n<=100),表示學(xué)生的人數(shù)。其后n行每行有1個(gè)整數(shù),取值為15到25。3.輸出輸出一行,該行包含一個(gè)浮點(diǎn)數(shù),為要求的平均年齡,保留到小數(shù)點(diǎn)后兩位。4.樣例輸入218175.樣例輸出17.506.提示要輸出浮點(diǎn)數(shù)、雙精度數(shù)小數(shù)點(diǎn)后2位數(shù)字,可以用下面這種形式:printf("%.2f",num);#include<stdio.h>intmain(){

int

n,i,sum,age;doublenum;

scanf("%d",&n);

for(i=0,sum=0;i<n;i++){

scanf("%d",&age);sum+=age;}num=(double)sum/n;printf("%.2f",num);return0;}數(shù)制轉(zhuǎn)換1.題目描述將十進(jìn)制數(shù)轉(zhuǎn)換成指定的進(jìn)制數(shù)2.輸入第一行輸入一個(gè)正整數(shù)n,表示需要轉(zhuǎn)換的進(jìn)制數(shù)第二行輸入一個(gè)十進(jìn)制正整數(shù)3.輸出轉(zhuǎn)換成n進(jìn)制的數(shù)4.樣例輸入6905.樣例輸出230數(shù)的距離差

1.題目描述給定一組正整數(shù),其中的最大值和最小值分別為max和min,其中的一個(gè)數(shù)x到max和min的距離差D定義為abs(abs(x-max)-abs(x-min))。其中,abs()表示求一個(gè)數(shù)的絕對(duì)值2.輸入輸入第一行為整數(shù)n,剩余n行每行一個(gè)正整數(shù)。3.輸出輸出僅一行,它的值為使得距離差D最小的x4.樣例輸入5317595.樣例輸出56.提示函數(shù)abs()定義在stdlib.h中#include<stdio.h>#include<stdlib.h>#defineN500intmain(){

int

a[N],n,i,m,p,r,s,t;

scanf("%d",&n);

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

scanf("%d",&a[i]); } p=m=a[0];

for(i=1;i<n;i++) {

if(m>a[i]) m=a[i];

if(p<a[i]) p=a[i]; } s=abs(abs(a[0]-p)-abs(a[0]-m)); t=a[0];

for(i=1;i<n;i++) { r=abs(abs(a[i]-p)-abs(a[i]-m));

if(s>r) { s=r; t=a[i]; } }

printf("%d",t); return0;}登山1.題目描述五一到了,NUIST-ACM隊(duì)組織大家去登山觀光,隊(duì)員們發(fā)現(xiàn)山上一個(gè)有N個(gè)景點(diǎn),并且決定按照順序來瀏覽這些景點(diǎn),即每次所瀏覽景點(diǎn)的編號(hào)都要大于前一個(gè)瀏覽景點(diǎn)的編號(hào)。同時(shí)隊(duì)員們還有另一個(gè)登山習(xí)慣,就是不連續(xù)瀏覽海拔相同的兩個(gè)景點(diǎn),并且一旦開始下山,就不再向上走了。隊(duì)員們希望在滿足上面條件的同時(shí),盡可能多的瀏覽景點(diǎn),你能幫他們找出最多可能瀏覽的景點(diǎn)數(shù)么?2.輸入Line1:N(2<=N<=1000)景點(diǎn)數(shù)Line2:N個(gè)整數(shù),每個(gè)景點(diǎn)的海拔3.輸出最多能瀏覽的景點(diǎn)數(shù)4.樣例輸入81861861502001601301972205.樣例輸出4#include<stdio.h>int

f(inta[1000],intn);intmain(){

intn,a[1000],i,m;

scanf("%d",&n);

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

scanf("%d",&a[i]); } m=f(a,n);

printf("%d",m); return0;}int

f(inta[1000],intn){

int

i,j=1,s,m,b[1000];

for(m=n;m>0;m--) {

for(i=1;i<m;i++) {

if(a[i]>a[i-1]) { j++; }

for(i=m-1;i<n-1;i++) {

if(a[i]<a[i+1]) { j++; } } }

b[n-m]=j; j=1; } s=b[0];

for(i=1;i<n;i++) {

if(s<b[i]) { s=b[i]; } } returns;}計(jì)算多項(xiàng)式的值1.題目描述多項(xiàng)式f(x)=ax3+bx2+cx+d2.輸入輸入僅一行,分別是x,及參數(shù)a、b、c、d的值,每個(gè)數(shù)都是雙精度浮點(diǎn)數(shù)。3.輸出輸出也僅一行,f(x)的值,保留小數(shù)點(diǎn)后7位。4.樣例輸入2.311.22235.樣例輸出33.08386926.提示使用printf("%.7lf",...)實(shí)現(xiàn)保留小數(shù)點(diǎn)后7位。#include<stdio.h>intmain(){doublex,a,b,c,d,y;scanf("%lf%lf%lf%lf%lf",&x,&a,&b,&c,&d);y=a*x*x*x+b*x*x+c*x+d;printf("%.7lf",y);return0;}計(jì)算兩個(gè)分?jǐn)?shù)的和

1.題目描述輸入兩個(gè)分?jǐn)?shù),形式如1/2,計(jì)算它們的和,以分?jǐn)?shù)形式輸出2.輸入第一行為第一個(gè)分?jǐn)?shù)第二行為第二個(gè)分?jǐn)?shù)3.輸出兩個(gè)分?jǐn)?shù)的和4.樣例輸入1/23/45.樣例輸出5/4#include<stdio.h>int

main(void){

int

a,b,c,d,m,n,i=2;

scanf("%d/%d",&a,&b);

scanf("%d/%d",&c,&d); m=a*d+b*c,n=b*d;

while(i<=m&&i<=n){

if(m%i==0&&n%i==0) { m=m/i,n=n/i; } i++; }

printf("%d/%d",m,n); return0;}排序

1.題目描述按要求排序2.輸入第一行為一個(gè)整數(shù)N(1<=N<=1000)第二行為N個(gè)絕對(duì)值不超過10000的整數(shù),表示需要排序的序列3.輸出輸出N行,為N個(gè)整數(shù)按升序排序后的序列4.樣例輸入61002016810995.樣例輸出6810991002016.提示這N個(gè)數(shù)需要隨機(jī)產(chǎn)生#include<stdio.h>#defineN1000int

main(void){

int

n,i,j,temp,a[N];

scanf("%d",&n);

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

scanf("%d",&a[i]); }

for(j=0;j<n-1;j++) {

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

if(a[i]>a[i+1]) { temp=a[i];

a[i]=a[i+1];a[i+1]=temp; } } }

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

printf("%d",a[i]); } return0;}日志排序

1.題目描述有一個(gè)網(wǎng)絡(luò)日志,記錄了網(wǎng)絡(luò)中計(jì)算任務(wù)的執(zhí)行情況,每個(gè)計(jì)算任務(wù)對(duì)應(yīng)一條如下形式的日志記錄:“hs_10000_p”是計(jì)算任務(wù)的名稱,“2007-01-1719:22:53,315”是計(jì)算任務(wù)開始執(zhí)行的時(shí)間“年-月-日時(shí):分:秒,毫秒”,“253.035(s)”是計(jì)算任務(wù)消耗的時(shí)間(以秒計(jì))hs_10000_p2007-01-1719:22:53,315253.035(s)請(qǐng)你寫一個(gè)程序,對(duì)日志中記錄計(jì)算任務(wù)進(jìn)行排序。時(shí)間消耗少的計(jì)算任務(wù)排在前面,時(shí)間消耗多的計(jì)算任務(wù)排在后面。如果兩個(gè)計(jì)算任務(wù)消耗的時(shí)間相同,則將開始執(zhí)行時(shí)間早的計(jì)算任務(wù)排在前面。2.輸入日志中每個(gè)記錄是一個(gè)字符串,每個(gè)字符串占一行。最后一行為空行,表示日志結(jié)束。日志中最多可能有10000條記錄。計(jì)算任務(wù)名稱的長(zhǎng)度不超過10,開始執(zhí)行時(shí)間的格式是YYYY-MM-DDHH:MM:SS,MMM,消耗時(shí)間小數(shù)點(diǎn)后有三位數(shù)字。計(jì)算任務(wù)名稱與任務(wù)開始時(shí)間、消耗時(shí)間之間以一個(gè)或多個(gè)空格隔開,行首和行尾可能有多余的空格。3.輸出排序好的日志記錄。每個(gè)記錄的字符串各占一行。輸入的格式與輸入保持一致,輸入包括幾個(gè)空格,你的輸出中也應(yīng)該包含同樣多的空格。4.樣例輸入hs_10000_p2007-01-1719:22:53,315253.035(s)hs_10001_p2007-01-1719:22:53,315253.846(s)hs_10002_m2007-01-1719:22:53,315129.574(s)hs_10002_p2007-01-1719:22:53,315262.531(s)hs_10003_m2007-01-1719:22:53,318126.622(s)hs_10003_p2007-01-1719:22:53,318136.962(s)hs_10005_m2007-01-1719:22:53,318130.487(s)hs_10005_p2007-01-1719:22:53,318253.035(s)hs_10006_m2007-01-1719:22:53,318248.548(s)hs_10006_p2007-01-1719:25:23,3673146.827(s)5.樣例輸出hs_10003_m2007-01-1719:22:53,318126.622(s)hs_10002_m2007-01-1719:22:53,315129.574(s)hs_10005_m2007-01-1719:22:53,318130.487(s)hs_10003_p2007-01-1719:22:53,318136.962(s)hs_10006_m2007-01-1719:22:53,318248.548(s)hs_10000_p2007-01-1719:22:53,315253.035(s)hs_10005_p2007-01-1719:22:53,318253.035(s)hs_10001_p2007-01-1719:22:53,315253.846(s)hs_10002_p2007-01-1719:22:53,315262.531(s)hs_10006_p2007-01-1719:25:23,3673146.827(s)數(shù)圈

1.題目描述以1為中心,用2,3,。。。,n的數(shù)字圍繞著中心輸出一個(gè)數(shù)圈,若n=4789106121154312161514132.輸入一個(gè)整數(shù)n(1<=n<=10)3.輸出一個(gè)數(shù)圈4.樣例輸入55.樣例輸出21222324252078910196121118543121716151413#include<stdio.h>#defineN10intmain(){

int

num[N][N];

intcircle=2,row,column,n,i=1,j;//circle為每轉(zhuǎn)半圈的數(shù)字個(gè)數(shù)

scanf("%d",&n);/*確定開始的那個(gè)1的位置*/if(n%2)row=column=n/2;elserow=column=n/2-1;

num[column][row]=i++;

num[column][++row]=i++;

while(circle<=n){j=1;

while(j<=circle-1){/**當(dāng)circle為奇偶數(shù)時(shí),行的增減不一樣**/if(circle%2)num[--column][row]=i++;else

num[++column][row]=i++;j++;}circle++;j=1;

while(j<=circle-1){/*同上**/if(circle%2)

num[column][--row]=i++;else

num[column][++row]=i++;j++;}}for(i=0;i<n;i++){

for(j=0;j<n;j++)printf("%3d",num[i][j]);

printf("\n");

}return0;}細(xì)菌繁殖1.題目描述一種細(xì)菌的繁殖速度是每天成倍增長(zhǎng)。例如:第一天有10個(gè),第二天就變成20個(gè),第三天變成40個(gè),第四天變成80個(gè),……?,F(xiàn)在給出第一天的日期和細(xì)菌數(shù)目,要你寫程序求出到某一天的時(shí)候,細(xì)菌的數(shù)目。2.輸入第一行有一個(gè)整數(shù)n,表示測(cè)試數(shù)據(jù)的數(shù)目。其后n行每行有5個(gè)整數(shù),整數(shù)之間用一個(gè)空格隔開。第一個(gè)數(shù)表示第一天的月份,第二個(gè)數(shù)表示第一天的日期,第三個(gè)數(shù)表示第一天細(xì)菌的數(shù)目,第四個(gè)數(shù)表示要求的那一天的月份,第五個(gè)數(shù)表示要求的那一天的日期。已知第一天和要求的一天在同一年并且該年不是閏年,要求的一天一定在第一天之后。數(shù)據(jù)保證要求的一天的細(xì)菌數(shù)目在長(zhǎng)整數(shù)(long)范圍內(nèi)。3.輸出對(duì)于每一組測(cè)試數(shù)據(jù),輸出一行,該行包含一個(gè)整數(shù),為要求的一天的細(xì)菌數(shù)。4.樣例輸入21111222810325.樣例輸出240#include<stdio.h>inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};int

main(void){

int

n,i;

scanf("%d",&n);

for(i=0;i<n;i++)有錯(cuò) {

intmonth1,day1,sum1,month,day;

scanf("%d%d%d

%d%d",&month1,&day1,&sum1,&month,&day);

intdays=0,j,k;

for(j=month1;j<month;j++) { days+=a[j-1]; } days+=day; days-=day1; longsum=1; for(k=0;k<days;k++) sum=sum*2; printf("%d\n",sum1*sum); } return0;}最長(zhǎng)最短單詞1.題目描述輸入1行單詞(不多于200個(gè)單詞),空格和逗號(hào)都是單詞間的間隔,試輸出第1個(gè)最長(zhǎng)的單詞和第1個(gè)最短單詞。如果所有單詞長(zhǎng)度相同,那么第一個(gè)單詞既是最長(zhǎng)單詞也是最短單詞。2.輸入一行單詞,空格和逗號(hào)都是單詞間的間隔3.輸出兩行輸出第1行,第一個(gè)最長(zhǎng)的單詞第2行,第一個(gè)最短的單詞4.樣例輸入IamstudyingProgramminglanguageCinNanjingUniversityofInformationandTechnology5.樣例輸出ProgrammingI#include<stdio.h>#include<string.h>intmain(){ chars[200];

inti=0,j=0,c=0,m=0,n=0,d=10;

gets(s);

while(s[i]!='\0') {

while(s[i]!=''&&s[i]!='\0') { j++; i++; }

if(j>c) { m=i-j; c=j; }

if(j<d) { n=i-j; d=j; }

while(s[i]=='') i++; j=0; }

while(s[m]!=''&&s[m]!='\0') {

printf("%c",s[m]); m++; }

printf("\n");

while(s[n]!=''&&s[n]!='\0') {

printf("%c",s[n]); n++; }

printf("\n"); return0;}Caesar密碼

1.題目描述JuliusCaesar生活在充滿危險(xiǎn)和陰謀的年代。為了生存,他首次發(fā)明了密碼,用于軍隊(duì)的消息傳遞。假設(shè)你是Caesar軍團(tuán)中的一名軍官,需要把Caesar發(fā)送的消息破譯出來、并提供給你的將軍。消息加密的辦法是:對(duì)消息原文中的每個(gè)字母,分別用該字母之后的第5個(gè)字母替換(例如:消息原文中的每個(gè)字母A都分別替換成字母F),其他字符不變,并且消息原文的所有字母都是大寫的。密碼字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ原文字母:VWXYZABCDEFGHIJKLMNOPQRSTU2.輸入最多不超過100個(gè)數(shù)據(jù)集組成。每個(gè)數(shù)據(jù)集由3部分組成:起始行:START密碼消息:由1到200個(gè)字符組成一行,表示Caesar發(fā)出的一條消息結(jié)束行:END在最后一個(gè)數(shù)據(jù)集之后,是另一行:ENDOFINPUT3.輸出4.樣例輸入STARTNSBFW,JAJSYXTKNRUTWYFSHJFWJYMJWJXZQYTKYWNANFQHFZXJXENDSTARTNBTZQIWFYMJWGJKNWXYNSFQNYYQJNGJWNFSANQQFLJYMFSXJHTSINSWTRJENDSTARTIFSLJWPSTBXKZQQBJQQYMFYHFJXFWNXRTWJIFSLJWTZXYMFSMJENDENDOFINPUT5.樣例輸出INWAR,EVENTSOFIMPORTANCEARETHERESULTOFTRIVIALCAUSESIWOULDRATHERBEFIRSTINALITTLEIBERIANVILLAGETHANSECONDINROMEDANGERKNOWSFULLWELLTHATCAESARISMOREDANGEROUSTHANHE#include<stdio.h>#include<string.h>voiddecipher(charmessage[]);voidmain(){ charmessage[201];

gets(message);

while(strcmp(message,"START")==0) {

decipher(message);

printf("%s\n",message);

gets(message); } return;}voiddecipher(charmessage[]){ charplain[27]="VWXYZABCDEFGHIJKLMNOPQRSTU"; charcipherEnd[201];

int

i,cipherLen;

gets(message);

cipherLen=strlen(message);

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

if(message[i]>='A'&&message[i]<='Z')message[i]=plain[message[i]-'A']; }

gets(cipherEnd); return;}N皇后問題

1.題目描述在N*N的方格棋盤放置了N個(gè)皇后,使得它們不相互攻擊(即任意2個(gè)皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務(wù)是,對(duì)于給定的N,求出有多少種合法的放置方法。2.輸入共有若干行,每行一個(gè)正整數(shù)N≤13,表示棋盤和皇后的數(shù)量;如果N=0,表示結(jié)束。3.輸出共有若干行,每行一個(gè)正整數(shù),表示對(duì)應(yīng)輸入行的皇后的不同放置數(shù)量。4.樣例輸入18505.樣例輸出19210大整數(shù)加法1.題目描述求兩個(gè)不超過200位的非負(fù)整數(shù)的和。2.輸入有兩行,每行是一個(gè)不超過200位的非負(fù)整數(shù),沒有多余的前導(dǎo)0。3.輸出一行,即相加后的結(jié)果。結(jié)果里不能有多余的前導(dǎo)0,即如果結(jié)果是342,那么就不能輸出為0342。4.樣例輸入22222222222222222222333333333333333333335.樣例輸出55555555555555555555#include<stdio.h>#include<string.h>#defineMAX_LEN200是書上的錯(cuò)誤的intan1[MAX_LEN+10];intan2[MAX_LEN+10];charszLine1[MAX_LEN+10];charszLine2[MAX_LEN+10];intmain(){ scanf("%s",szLine1); scanf("%s",szLine2);

int

i,j; memset(an1,0,sizeof(an1));memset(an1,0,sizeof(an2));

intnLen1=strlen(szLine1); j=0;

for(i=nLen1-1;i>=0;i--) { an1[j++]=szLine1[i]-'0'; }

intnLen2=strlen(szLine2); j=0;

for(i=nLen2-1;i>=0;i--) { an2[j++]=szLine2[i]-'0'; }

for(i=0;i<MAX_LEN;i++) { an1[i]+=an2[i]; if(an1[i]>=10) an1[i]-=10; an1[i+1]++; }bool

bStartOutput=false;for(i=MAX_LEN;i>=0;i--){

if(bStartOutput) printf("%d",an1[i]); elseif(an1[i]) printf("%d",an1[i]);

bStartOutput=true;}return0;}#include<stdio.h>intmain()王申豪版{

int

base,num,count=0;

intarr[10];

scanf("%d%d",&base,&num); do {

arr[count++]=num%base; num=num/base; }while(num>0); count--;

for(;count>=0;--count) {

printf("%d",arr[count]); }

printf("\n"); return0;}第K個(gè)回文數(shù)1.題目描述回文數(shù)是這樣一個(gè)正整數(shù):它從左往右讀和從右往左讀是一樣的。例如1,111,121,505都是回文數(shù)。將1到1000內(nèi)所有回文數(shù)按從小到達(dá)排序后,第k個(gè)回文數(shù)是多少呢?2.輸入第一行為一個(gè)整數(shù)N,表示詢問的次數(shù)。以下N行每行一個(gè)整數(shù)k,表示詢問第k個(gè)回文數(shù)是多少3.輸出輸出共N行,按照輸入數(shù)據(jù)的順序,依次輸出第k個(gè)回文數(shù)。4.樣例輸入25105.樣例輸出511#include<stdio.h>#defineM1000有問題int

main(void){

int

i,j=0,n,m=0,a[M];

for(i=1;i<=1000;i++) {n=i;

while(i>0) { m=m*10+i%10; i=i/10; }

if(m==n) {

a[j]=i; j++; } }

int

N,k[M];

scanf("%d",&N);

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

scanf("%d",&k[i]); }

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

printf("%d",a[k[i]]); } return0;}計(jì)算約數(shù)的和

1.題目描述給你一個(gè)數(shù)字求它的所有約數(shù)的和。比如12,約數(shù)有1,2,3,4,6,12加起來是28現(xiàn)在給你一個(gè)數(shù)字I。(1<=I<=1,000)2.輸入一個(gè)數(shù)字I3.輸出約數(shù)之和4.樣例輸入125.樣例輸出28#include<stdio.h>intmain(){

int

i,m,sum;

scanf("%d",&m);

for(i=1,sum=0;i<m+1;i++) {

if(m%i==0)

sum+=i; }

printf("%d",sum); return0;}判斷閏年1.題目描述判斷某年是否是閏年。2.輸入輸入只有一行,包含一個(gè)整數(shù)a(0<a<3000)3.輸出一行,如果公元a年是閏年輸出Y,否則輸出N4.樣例輸入20065.樣例輸出N6.提示公歷紀(jì)年法中,能被4整除的大多是閏年,但能被100整除而不能被400整除的年份不是閏年,能被3200整除的也不是閏年,如1900年是平年,2000年是閏年,3200年不是閏年#include<stdio.h>intmain(){

inta;

scanf("%d",&a); if(a%4==0&&a%100!=0||a%400==0)

printf("Y"); else

printf("N");return0;}求出10個(gè)數(shù)的最大值

1.題目描述從鍵盤錄入一組10個(gè)整型數(shù)據(jù),找出值最大的數(shù)據(jù),并輸出2.輸入從鍵盤輸入十個(gè)數(shù),數(shù)據(jù)之間用空格分隔3.輸出在屏幕上輸出結(jié)果4.樣例輸入123465789110205.樣例輸出65#include<stdio.h>intmain(){

inta[10],i;

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

scanf("%d",&a[i]);}

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

if(a[i]>a[i+1])a[i+1]=a[i];}

printf("%d",a[i]);return0;}整數(shù)求和

1.題目描述給定兩個(gè)整數(shù),求它們之和2.輸入兩個(gè)整數(shù)A,B.3.輸出兩個(gè)整數(shù)的和。4.樣例輸入125.樣例輸出36.提示如果對(duì)程序答題格式不清楚的,可以查看系統(tǒng)左上角菜單的FAQ,里面有本題的各種語言的樣例解答.#include<stdio.h>intmain(){

int

a,b;

scanf("%d%d",&a,&b);

printf("%d\n",a+b);return0;}求最值

1.題目描述給定N個(gè)整數(shù)(1<=N<=100),求出這N個(gè)數(shù)中的最大值,最小值。2.輸入多組數(shù)據(jù),第一行為一個(gè)整數(shù)N,第二行為N個(gè)不超過100的正整數(shù),用空格隔開。3.輸出對(duì)每組數(shù)據(jù)輸出一行,包含兩個(gè)整數(shù),用一個(gè)空格隔開,分別表示N個(gè)數(shù)中的最大值和最小值4.樣例輸入546731443515.樣例輸出7151#include<stdio.h>#defineN100intmain(){

int

n,i,max,min;

int

a[N];

scanf("%d",&n);

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

scanf("%d",&a[i]); } max=a[0];min=a[0];

for(i=1;i<n;i++) {

if(max<a[i]) { max=a[i]; } else { min=a[i]; } }

printf("%d\n%d",max,min); return0;}求最小非平凡因子1.題目描述給定一個(gè)整整數(shù)n(2≤n≤50),求n的最小非平凡因子。2.輸入輸入僅一行,一個(gè)正整數(shù)n(2≤n≤50)。3.輸出輸出僅一行,如果n是素?cái)?shù),輸出prime;否則,輸出n的最小非平凡因子。4.樣例輸入355.樣例輸出56.提示對(duì)于合數(shù)n,n一定存在不大于sqrt(n)的素因子;1和n都是n的平凡因子,其他因子稱為非平凡因子;最小非平凡因子一定是素?cái)?shù)符號(hào)三角形問題1.題目描述下圖是一個(gè)首行有7個(gè)符號(hào)的符號(hào)三角形,第一行的排列已經(jīng)給定。并且2個(gè)同號(hào)下面都是“+”號(hào),2個(gè)異號(hào)下面都是“-”號(hào)。

++-+-+++----+-+++--++--+---+符號(hào)三角形的第一行有n個(gè)符號(hào)。符號(hào)三角形問題要求對(duì)于給定第一行符號(hào)個(gè)數(shù)n,計(jì)算第一行有多少種“+”“-”組合排列方式,使這個(gè)符號(hào)三角形所含的“+”和“-”的個(gè)數(shù)相同。2.輸入符號(hào)三角形的第一行符號(hào)個(gè)數(shù),類型整型(<=20)3.輸出滿足題目要求的不同的符號(hào)三角型個(gè)數(shù),類型整型4.樣例輸入35.樣例輸出46.提示由于算法的時(shí)間復(fù)雜度比較大O(2^n),故建議在測(cè)試時(shí)n的取值不宜太大。生理周期1.題目描述人生來就有三個(gè)生理周期,分別為體力、感情和智力周期,它們的周期長(zhǎng)度為23天、28天和33天。每一個(gè)周期中有一天是高峰。在高峰這天,人會(huì)在相應(yīng)的方面表現(xiàn)出色。例如,智力周期的高峰,人會(huì)思維敏捷,精力容易高度集中。因?yàn)槿齻€(gè)周期的周長(zhǎng)不同,所以通常三個(gè)周期的高峰不會(huì)落在同一天。對(duì)于每個(gè)人,我們想知道何時(shí)三個(gè)高峰落在同一天。對(duì)于每個(gè)周期,我們會(huì)給出從當(dāng)前年份的第一天開始,到出現(xiàn)高峰的天數(shù)(不一定是第一次高峰出現(xiàn)的時(shí)間)。你的任務(wù)是給定一個(gè)從當(dāng)年第一天開始數(shù)的天數(shù),輸出從給定時(shí)間開始(不包括給定時(shí)間)下一次三個(gè)高峰落在同一天的時(shí)間(距給定時(shí)間的天數(shù))。例如:給定時(shí)間為10,下次出現(xiàn)三個(gè)高峰同天的時(shí)間是12,則輸出2(注意這里不是3)。2.輸入輸入四個(gè)整數(shù):p,e,i和d。p,e,i分別表示體力、情感和智力高峰出現(xiàn)的時(shí)間(時(shí)間從當(dāng)年的第一天開始計(jì)算)。d是給定的時(shí)間,可能小于p,e,或i。所有給定時(shí)間是非負(fù)的并且小于365,所求的時(shí)間小于21252。3.輸出從給定時(shí)間起,下一次三個(gè)高峰同天的時(shí)間(距離給定時(shí)間的天數(shù))。#include<stdio.h>voidmain()書上的輸出有問題{

intp,e,i,d,j,no=1;

scanf("%d%d%d",&p,&e,&i,&d);

while(p!=-1&&e!=-1&&d!=-1) {

for(j=d+1;j<21252;j++) { if((j-p)%23==0)break;

for(;j<21252;j=j+23) { if((j-e)%28==0)break; }

for(;j<21252;j=j+23*28) { if((j-i)%33==0)break; } }

printf("Case%d",no);

printf(":thenexttriplepeakoccursin%ddays.\n",j-d);

scanf("%d%d%d",&p,&e,&i,&d); no++; }}數(shù)制轉(zhuǎn)換1.題目描述求任意兩個(gè)不同進(jìn)制非負(fù)整數(shù)的轉(zhuǎn)換(2進(jìn)制~16進(jìn)制),所給整數(shù)在long所能表達(dá)的范圍之內(nèi)。不同進(jìn)制的表示符號(hào)為(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F(xiàn))。2.輸入輸入只有一行,包含三個(gè)整數(shù)a,n,b。a表示其后的n是a進(jìn)制整數(shù),b表示欲將a進(jìn)制整數(shù)n轉(zhuǎn)換成b進(jìn)制整數(shù)。a,b是十進(jìn)制整數(shù),2=<a,b<=16。3.輸出輸出包含一行,該行有一個(gè)整數(shù)為轉(zhuǎn)換后的b進(jìn)制數(shù)。輸出時(shí)字母符號(hào)全部用大寫表示,即(0,1,...,9,A,B,...,F(xiàn))。4.樣例輸入15Aab375.樣例輸出210306選課1.題目描述教務(wù)網(wǎng)站如期的在選課之日出問題了,這次的問題是登陸窗口的驗(yàn)證碼無法顯示了,同學(xué)們只能靠猜驗(yàn)證碼來登陸選課。教務(wù)的登陸系統(tǒng)剛剛經(jīng)過改進(jìn),改進(jìn)后的驗(yàn)證碼均為1..N的一個(gè)排列。一般的同學(xué)們?cè)谠囼?yàn)的時(shí)候都是按照所有排列的字典序逐個(gè)試驗(yàn),但是TN發(fā)掘這樣試驗(yàn)很乏味,所以他決定每次嘗試前一個(gè)排列后面的第M個(gè)排列。但是一段時(shí)間之后他發(fā)現(xiàn),尋找一個(gè)排列后面的第M個(gè)排列并不是一件容易的事情,所以他希望你幫助他。2.輸入Line1:N(1<=N<=10000)Line2:M(1<=M<=100)Line3:1..N的一個(gè)排列3.輸出所求的排列4.樣例輸入53123455.樣例輸出12453字符串插入

1.題目描述有兩個(gè)字符串str和substr,str的字符個(gè)數(shù)不超過10,substr的字符個(gè)數(shù)為3。(字符個(gè)數(shù)不包括字符串結(jié)尾處的'\0'。)將substr插入到str中ASCII碼最大的那個(gè)字符后面,若有多個(gè)最大則只考慮第一個(gè)。2.輸入輸入包括若干行,每一行為一組測(cè)試數(shù)據(jù),格式為str

substr3.輸出對(duì)于每一組測(cè)試數(shù)據(jù),輸出插入之后的字符串。4.樣例輸入abcab

eee123435555.樣例輸出abceeeab12345553排列

1.題目描述大家知道,給出正整數(shù)n,則1到n這n個(gè)數(shù)可以構(gòu)成n!種排列,把這些排列按照從小到大的順序(字典順序)列出,如n=3時(shí),列出123,132,213,231,312,321六個(gè)排列。任務(wù)描述:給出某個(gè)排列,求出這個(gè)排列的下k個(gè)排列,如果遇到最后一個(gè)排列,則下1排列為第1個(gè)排列,即排列123…n。比如:n=3,k=2給出排列231,則它的下1個(gè)排列為312,下2個(gè)排列為321,因此答案為321。2.輸入第一行是一個(gè)正整數(shù)m,表示測(cè)試數(shù)據(jù)的個(gè)數(shù),下面是m組測(cè)試數(shù)據(jù),每組測(cè)試數(shù)據(jù)第一行是2個(gè)正整數(shù)n(1<=n<1024)和k(1<=k<=64),第二行有n個(gè)正整數(shù),是1,2…n的一個(gè)排列。3.輸出對(duì)于每組輸入數(shù)據(jù),輸出一行,n個(gè)數(shù),中間用空格隔開,表示輸入排列的下k個(gè)排列。4.樣例輸入33123131321102123456789105.樣例輸出31212312345679810#include<stdio.h>#include<string.h>#defineMAX_LEN200有點(diǎn)問題但問題不大最后一行輸不出來intan1[MAX_LEN+10];intan2[MAX_LEN+10];charszLine1[MAX_LEN+10];charszLine2[MAX_LEN+10];intmain(){ scanf("%s",szLine1); scanf("%s",szLine2);

int

i,j; memset(an1,0,sizeof(an1));memset(an1,0,sizeof(an2));

intnLen1=strlen(szLine1); j=0;

for(i=nLen1-1;i>=0;i--) { an1[j++]=szLine1[i]-'0'; }

intnLen2=strlen(szLine2); j=0;

for(i=nLen2-1;i>=0;i--) { an2[j++]=szLine2[i]-'0'; }

for(i=0;i<MAX_LEN;i++) { an1[i]+=an2[i]; if(an1[i]>=10) an1[i]-=10; an1[i+1]++; }bool

bStartOutput=false;for(i=MAX_LEN;i>=0;i--){

if(bStartOutput) printf("%d",an1[i]); elseif(an1[i]) printf("%d",an1[i]);

bStartOutput=true;}return0;}采藥1.題目描述辰辰是個(gè)很有潛能、天資聰穎的孩子,他的夢(mèng)想是稱為世界上最偉大的醫(yī)師。為此,他想拜附近最有威望的醫(yī)師為師。醫(yī)師為了判斷他的資質(zhì),給他出了一個(gè)難題。醫(yī)師把他帶到個(gè)到處都是草藥的山洞里對(duì)他說:“孩子,這個(gè)山洞里有一些不同的草藥,采每一株都需要一些時(shí)間,每一株也有它自身的價(jià)值。我會(huì)給你一段時(shí)間,在這段時(shí)間里,你可以采到一些草藥。如果你是一個(gè)聰明的孩子,你應(yīng)該可以讓采到的草藥的總價(jià)值最大?!?.輸入輸入的第一行有兩個(gè)整數(shù)T(1<=T<=1000)和M(1<=M<=100),T代表總共能夠用來采藥的時(shí)間,M代表山洞里的草藥的數(shù)目。接下來的M行每行包括兩個(gè)在1到100之間(包括1和100)的的整數(shù),分別表示采摘某株草藥的時(shí)間和這株草藥的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論