亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

2013年第四屆藍橋杯C/C++B組真題訓練(一,2017.3.3)

2019-11-06 07:58:54
字體:
來源:轉載
供稿:網友
1. (4')高斯日記    大數學家高斯有個好習慣:無論如何都要記日記。    他的日記有個與眾不同的地方,他從不注明年月日,而是用一個整數代替,比如:4210    后來人們知道,那個整數就是日期,它表示那一天是高斯出生后的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用于浪費呢?    高斯出生于:1777年4月30日。        在高斯發現的一個重要定理的日記上標注著:5343,因此可算出那天是:1791年12月15日。    高斯獲得博士學位的那天日記上標著:8113       請你算出高斯獲得博士學位的年月日。提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21請嚴格按照格式,通過瀏覽器提交答案。

注意:只提交這個日期,不要寫其它附加內容,比如:說明性的文字。

【分析】趣味日期問題。這里要注意出生當天記為第一天

源代碼:

#include <stdio.h>void fun(int y,int m,int d,int days){	int i,t;	int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};	t=246;                         //1777年剩余天數 出生當天為第一天 	y++,m=1,d=1; 	while(t<days)	{		if((y%4==0 && y%100!=0) || (y%400==0))			month[1]=29;		else			month[1]=28;		if(m<12)		{			if(days-t<=month[m-1])			{				d=(days-t);				break;			}			else			{				t+=month[m-1];				m++;				d=1;			}		}		else if(m==12)		{			if(days-t<=month[m-1])			{				d=(days-t);				break;				}			else			{				t+=month[m-1];				y++;				m=1;				d=1;			}		}	}	PRintf("%04d-%02d-%02d/n",y,m,d);} int main(){	int y=1777;	int m=4;	int d=30;	int days;	while(scanf("%d",&days)!=EOF)		fun(y,m,d,days);		return 0;}程序截圖:

【答案】1799-07-16

2. (5')馬虎的算式    小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。    有一次,老師出的題目是:36 x 495 = ?    他卻給抄成了:396 x 45 = ?    但結果卻很戲劇性,他的答案竟然是對的??!    因為 36 * 495 = 396 * 45 = 17820    類似這樣的巧合情況可能還有很多,比如:27 * 594 = 297 * 54    假設 a b c d e 代表1~9不同的5個數字(注意是各不相同的數字,且不含0)    能滿足形如: ab * cde = adb * ce 這樣的算式一共有多少種呢?請你利用計算機的優勢尋找所有的可能,并回答不同算式的種類數。滿足乘法交換律的算式計為不同的種類,所以答案肯定是個偶數。答案直接通過瀏覽器提交。注意:只提交一個表示最終統計種類數的數字,不要提交解答過程或其它多余的內容。

【分析】循環+暴力枚舉(或結合全排列知識求解)

源代碼:

#include <stdio.h>int Judge(int a[],int n)                   //判斷abcde 5個數是否有重復{	int i,j;	int flag=1;	for(i=0;i<n;i++)	{		for(j=i+1;j<n;j++)		{			if(a[i]==a[j])			{				flag=0;				break;			}		}	}	return flag;}int main(){	int a[5];	int left,right;	int count=0;	for(a[0]=1;a[0]<=9;a[0]++)	{		for(a[1]=1;a[1]<=9;a[1]++)		{			for(a[2]=1;a[2]<=9;a[2]++)			{				for(a[3]=1;a[3]<=9;a[3]++)				{					for(a[4]=1;a[4]<=9;a[4]++)					{						left=(a[0]*10+a[1])*(a[2]*100+a[3]*10+a[4]);						right=(a[0]*100+a[3]*10+a[1])*(a[2]*10+a[4]);						if(left==right && Judge(a,5))						{							//printf("%d%d*%d%d%d=%d%d%d*%d%d/n",a[0],a[1],a[2],a[3],a[4],a[0],a[3],a[1],a[2],a[4]);							count++;						}									}				}			}		}	} 	printf("%d/n",count);	return 0;}程序截圖:

【答案】142

3. (8')第39級臺階

    小明剛剛看完電影《第39級臺階》,離開電影院的時候,他數了數礼堂前的臺階數,恰好是39級!    站在臺階前,他突然又想著一個問題:    如果我每一步只能邁上1個或2個臺階。先邁左腳,然后左右交替,最后一步是邁右腳,也就是說一共要走偶數步。那么,上完39級臺階,有多少種不同的上法呢?    請你利用計算機的優勢,幫助小明尋找答案。要求提交的是一個整數。注意:不要提交解答過程,或其它的輔助說明文字。

【分析】考慮步數的“N階樓梯上樓問題”+遞歸思想的運用

        (參考)這個程序不需要糾結在左腳和右腳的問題上,從中抽象出限制條件:一共走的步數是偶數;

        我們可以通過遞歸來實現,對每次遞歸的結果進行判斷:如果走過的臺階數為39則結束遞歸,判斷走的步數是否為偶數,為偶數則方案數+1 

        要說明stair可能出現小于0的情況,當最后只剩了一個臺階,但是小明想要跨兩步的時候,這樣是不可能的,也就是說他只能跨一步,兩步是不可能出現的,因此也不可能是符合條件的走法。這種遞歸的效果如下圖:

        這個二叉樹(本算法并不涉及二叉樹知識,只是通過概念來理解)的每個葉子節點都是一種情況:

        我們將每一個節點稱為(x,y)

        葉子節點分為兩種情況:x為-1和x為0,x為-1的情況在現實中不可能發生,所以不予以考慮;

        我們對每一種x為0的情況都進行判斷,如果y的值為偶數,則方案數加1。

源代碼:

#include <stdio.h>long count=0;                         //count記錄方案總數 void dfs(int stair,int step)          //stari用于表示剩余的臺階數,當等于0時停止遞歸{	int i;                            //step是走過的步數,用來判斷是否是偶數,是否符合要求    if(sum<0)		return;     if(step%2 == 0 && stair== 0)      //如果臺階全部走完而且步數為偶數,則方案數+1       {            count++;         return;        }        for(i=1;i<=2;i++)                 //下一步可有走一步或者兩步,遞歸分析           dfs(stair-i,step+1);    }int main()    {        dfs(39,0);    printf("%d/n",count);      return 0;    }程序截圖:

【答案】51167078

※4. (12’)黃金連分數    黃金分割數0.61803... 是個無理數,這個常數十分重要,在許多工程問題中會出現。有時需要把這個數字求得很精確。    對于某些精密工程,常數的精度很重要。也許你聽說過哈勃太空望遠鏡,它首次升空后就發現了一處人工加工錯誤,對那樣一個龐然大物,其實只是鏡面加工時有比頭發絲還細許多倍的一處錯誤而已,卻使它成了“近視眼”!!    言歸正傳,我們如何求得黃金分割數的盡可能精確的值呢?有許多方法。    比較簡單的一種是用連分數:                  1    黃金數 = ---------------------                        1             1 + -----------------                          1                 1 + -------------                            1                     1 + ---------                          1 + ...    這個連分數計算的“層數”越多,它的值越接近黃金分割數。    請你利用這一特性,求出黃金分割數的足夠精確值,要求四舍五入到小數點后100位。    小數點后3位的值為:0.618    小數點后4位的值為:0.6180    小數點后5位的值為:0.61803    小數點后7位的值為:0.6180340   (注意尾部的0,不能忽略)你的任務是:寫出精確到小數點后100位精度的黃金分割值。注意:尾數的四舍五入! 尾數是0也要保留!顯然答案是一個小數,其小數點后有100位數字,請通過瀏覽器直接提交該數字。注意:不要提交解答過程,或其它輔助說明類的內容。

【分析】黃金分割數與斐波那契數有關,實際上是相鄰兩個斐波那契數的商。對于小數點后100位精度,可用模擬手算除法實現。但是注意這里的精確度可能不夠。

源代碼:

#include <stdio.h>int main(){	int i,ans;	long long int fib[51];	long long int x,y;	fib[0]=0,fib[1]=1;	for(i=2;i<=51;i++)		fib[i]=fib[i-1]+fib[i-2];	x=fib[48],y=fib[49];	printf("x=%lld y=%lld/n",x,y);	for(i=0;i<=100;i++)                //模擬除法的過程,每次輸出小數點后的第i位 	{		ans=x/y;		x=(x%y)*10;		printf("%d",ans);		if(i==0)			printf(".");	}	printf("/n");	return 0;}程序截圖:

附:模擬筆算除法的實現:

源代碼:

#include <stdio.h>void fun(long long int x,long long int y,int digit){	int i;	long long int ans;	for(i=0;i<=digit;i++)            //精確到第digit位,逐位打印結果 	{		ans=x/y;		x=(x%y)*10;		printf("%lld",ans);		if(i==0)			printf(".");	}	printf("/n");}int main(){	long long int m,n;	int digit; 	while(scanf("%lld %lld %d",&m,&n,&digit)!=EOF)		fun(m,n,digit);	return 0;}程序截圖:

5. (5')前綴判斷

    如下的代碼判斷 needle_start指向的串是否為haystack_start指向的串的前綴,如不是,則返回NULL。    比如:"abcd1234" 就包含了 "abc" 為前綴char* prefix(char* haystack_start, char* needle_start){char* haystack = haystack_start;char* needle = needle_start;while(*haystack && *needle){if(______________________________) return NULL;  //填空位置}if(*needle) return NULL;return haystack_start;}請分析代碼邏輯,并推測劃線處的代碼,通過網頁提交。注意:僅把缺少的代碼作為答案,千萬不要填寫多余的代碼、符號或說明文字??!

【分析】子串的判斷

填空后代碼:

#include <stdio.h>#include <string.h>#define maxlen 1010char* prefix(char* haystack_start, char* needle_start){	char* haystack = haystack_start;	char* needle = needle_start;	while(*haystack && *needle)	{		if(*(haystack++)!=*(needle++)) return NULL;  //填空位置  如果對應位置上s1串的字符與s2串的字符不同,則不滿足題意 	}	if(*needle)                                      //s2串比s1串長,則不滿足題意 		return NULL;	return haystack_start;}int main()    {	char s1[maxlen],s2[maxlen];                      //輸入s1 s2兩串,題意即判斷s2串是否是s1串的子串 	while(gets(s1)!=NULL)                            //如果是則打印s1串 	{		gets(s2);		printf("%s/n",prefix(s1,s2));	}	return 0;}程序截圖:

【答案】*(haystack++)!=*(needle++)

6. (7')三部排序

    一般的排序有許多經典算法,如快速排序、希爾排序等。    但實際應用時,經常會或多或少有一些特殊的要求。我們沒必要套用那些經典算法,可以根據實際情況建立更好的解法。    比如,對一個整型數組中的數字進行分類排序:    使得負數都靠左端,正數都靠右端,0在中部。注意問題的特點是:負數區域和正數區域內并不要求有序??梢岳眠@個特點通過1次線性掃描就結束戰斗!!    以下的程序實現了該目標。    其中x指向待排序的整型數組,len是數組的長度。void sort3p(int* x, int len){int p = 0;int left = 0;int right = len-1;while(p<=right){if(x[p]<0){int t = x[left];x[left] = x[p];x[p] = t;left++;p++;}else if(x[p]>0){int t = x[right];x[right] = x[p];x[p] = t;right--; }else{__________________________;  //填空位置}}}   如果給定數組:   25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0   則排序后為:   -3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25請分析代碼邏輯,并推測劃線處的代碼,通過網頁提交注意:僅把缺少的代碼作為答案,千萬不要填寫多余的代碼、符號或說明文字??!

【分析】該三部排序算法的基本思想:負數放左邊,正數放右邊,零放在中間。

源代碼:

#include <stdio.h>#include <string.h>#define maxn 105void sort3p(int* x, int len){	int p = 0;	int left = 0;	int right = len-1;		while(p<=right)	{		if(x[p]<0)		{			int t = x[left];			x[left] = x[p];			x[p] = t;			left++;			p++;		}		else if(x[p]>0)		{			int t = x[right];			x[right] = x[p];			x[p] = t;			right--;					}		else		{			p++;  //填空位置		}	}}int main()    {	int i,len,a[maxn]; 	while(scanf("%d",&len)!=EOF)	{		for(i=0;i<len;i++)			scanf("%d",&a[i]);		sort3p(a,len);		for(i=0;i<len;i++)			printf("%d ",a[i]);		printf("/n");	}	return 0;}程序截圖:

【答案】p++


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色噜噜久久综合伊人一本| 91久久久久久久久| 51久久精品夜色国产麻豆| 欧美成人精品在线视频| 国产精品18久久久久久首页狼| 91爱爱小视频k| 国产精品黄页免费高清在线观看| 日韩三级成人av网| 成人午夜激情免费视频| 一本色道久久88综合亚洲精品ⅰ| 亚洲一区二区三区四区在线播放| 欧美一区二区三区四区在线| 一个人看的www久久| 精品国产欧美一区二区五十路| 成人精品aaaa网站| 国产精品日本精品| 在线亚洲国产精品网| 色综合色综合网色综合| 亚洲一区亚洲二区亚洲三区| 精品视频在线播放色网色视频| 亚洲系列中文字幕| 成年无码av片在线| 欧美另类极品videosbestfree| 国产一区二区欧美日韩| 中文字幕日韩专区| 自拍偷拍免费精品| 久久综合久久88| 久久国内精品一国内精品| 日韩欧美精品免费在线| 中文字幕精品www乱入免费视频| 精品欧美一区二区三区| 国产精品扒开腿做爽爽爽的视频| 亚洲国产精品999| 97热在线精品视频在线观看| 欧美性猛交xxxx免费看漫画| 国产欧美一区二区三区视频| 国产精品黄色影片导航在线观看| 98视频在线噜噜噜国产| 九九精品在线视频| 亚洲天天在线日亚洲洲精| 日韩av在线免费观看| 欧美午夜xxx| 久久精视频免费在线久久完整在线看| 福利二区91精品bt7086| 欧洲亚洲女同hd| 97在线看免费观看视频在线观看| 国产精品高潮呻吟视频| 91在线视频九色| 97精品免费视频| 亚洲精品电影网| 欧美成人精品在线| 亚洲偷欧美偷国内偷| 成人国产精品免费视频| 久久久久久久一区二区三区| 久久久亚洲福利精品午夜| 国产成人精品视频在线| 上原亚衣av一区二区三区| 国产精品久久久| 91香蕉国产在线观看| 欧美高清理论片| 国产精品777| 欧美激情视频三区| 久久精品视频在线播放| 国产噜噜噜噜久久久久久久久| 成人黄色中文字幕| 久久久久久伊人| 中文字幕国产精品| 成人免费视频网| 一区二区三区视频免费在线观看| 福利一区视频在线观看| 国产免费一区二区三区在线能观看| 日韩欧美999| 欧美与黑人午夜性猛交久久久| 日韩av在线影院| 一区二区三区www| 久久在线观看视频| 国产成人在线播放| 538国产精品一区二区在线| 国产成人精品视频在线观看| 欧美最猛性xxxx| 久久久99久久精品女同性| 一区二区三区回区在观看免费视频| 在线观看日韩视频| 一本大道亚洲视频| 精品福利视频导航| 日韩精品免费在线播放| 日韩精品视频在线免费观看| 欧美在线观看一区二区三区| 欧美日韩激情美女| 色妞在线综合亚洲欧美| 久久久久亚洲精品成人网小说| 69av在线播放| 欧美色视频日本版| 91国语精品自产拍在线观看性色| 成人欧美一区二区三区黑人| 亚洲精品资源美女情侣酒店| 亚洲国产精品电影| 欧美孕妇与黑人孕交| 日韩在线免费观看视频| 成人av资源在线播放| 欧美成人精品一区二区三区| www日韩中文字幕在线看| 人人爽久久涩噜噜噜网站| 国产精品18久久久久久麻辣| 日韩一区二区精品视频| 欧美午夜精品在线| 亚洲精品欧美极品| 日韩av观看网址| 亚洲成色999久久网站| 在线播放国产一区中文字幕剧情欧美| 尤物yw午夜国产精品视频明星| 久久久国产精彩视频美女艺术照福利| 亚洲一区亚洲二区亚洲三区| 久久久精品国产网站| 91精品国产91久久久久福利| 91精品国产自产在线| 国产精品久久久久久久一区探花| 亚洲精品免费网站| 秋霞午夜一区二区| 欧美成人高清视频| 久久久久久久影视| 麻豆国产va免费精品高清在线| 狠狠爱在线视频一区| 国产精品视频26uuu| 91在线中文字幕| 日韩中文字幕网址| 久久精品国产一区| 亚洲韩国欧洲国产日产av| 久久激情视频久久| 欧美噜噜久久久xxx| 国产视频亚洲精品| 日韩av中文字幕在线| 91精品国产沙发| 亚洲精品短视频| 色七七影院综合| 亚洲激情国产精品| 日韩成人av在线播放| 中文字幕av一区| 欧美日韩福利视频| 国产精品av免费在线观看| 欧美一级黑人aaaaaaa做受| 国产精品精品一区二区三区午夜版| 国产精品 欧美在线| 亚洲精品国产综合区久久久久久久| 精品久久久久久亚洲精品| 欧美插天视频在线播放| 国产精品网站入口| 亚洲精品免费在线视频| 亚洲欧美日韩第一区| 欧洲s码亚洲m码精品一区| 久久久久女教师免费一区| 精品久久久久久久久久ntr影视| 亚洲精品白浆高清久久久久久| 69视频在线播放| 在线看片第一页欧美| 秋霞午夜一区二区| 亚洲精品国产综合久久| 国产一区二区在线免费视频| 欧美成人四级hd版| 亚洲精品国产美女| 欧美日韩成人黄色| 欧美日韩精品在线播放| 精品自拍视频在线观看| 欧美日韩免费区域视频在线观看|