1. 程式人生 > >2013第四屆藍橋杯 C/C++本科A組 真題答案解析

2013第四屆藍橋杯 C/C++本科A組 真題答案解析

1 .高斯日記

 大數學家高斯有個好習慣:無論如何都要記日記。

他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210

後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用於浪費呢?

高斯出生於:1777年4月30日

在高斯發現的一個重要定理的日記上標註著:5343,因此可算出那天是:1791年12月15日

高斯獲得博士學位的那天日記上標著:8113   請你算出高斯獲得博士學位的年月日提交答案的格式是:1799-07-16,例如:1980-03-21

請嚴格按照格式,通過瀏覽器提交答案

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

解析:這題應該算是沒什麼難度,直接計算即可因為高斯是4月30出生的,所以我這裡先算到12月31號,看看他年份是否需要加1,接下來就是按照每12個月一年來計算了

  1. #include <stdio.h>  
  2. int months[]={31,28,31,30,31,30,31,31,30,31,30,31,   
  3. int isLeap(int year)  
  4.     if((year%400==0)|| (year%4==0&&year%100!=0))  
  5.         return 1;  
  6.         return 0;  
  7. int main()  
  8.     int days = 8113-1;//他出生的那天為第一天,所以這裡需要減去一  
  9.     int year = 1777;  
  10.     //printf("%d\n",isLeap(1778));  
  11.     for(int i=4;i<12;i++)  
  12.         if(days>months[i])  
  13.             days -= months[i];  
  14.             if(i==11)  
  15.                 year++;  
  16.     while(days>364+isLeap(year+1))  
  17.         year++;  
  18.         if(isLeap(year))  
  19.             days--;  
  20.         days -= 365;  
  21.     for(i=0;i<12;i++)  
  22.         if(days>months[i])  
  23.             days-=months[i];  
  24.         } else {  
  25.             break;  
  26.     if(days==0)//如果days減為0,則說明days還是上一個月的最後一天  
  27.         if(i==-1)  
  28.             i=11;  
  29.         days = months[i];  
  30.     int month = i+1;  
  31.     if(isLeap(year)&& month>2)  
  32.         days--;  
  33.     printf("%d-%02d-%02d\n",year,month,days);  
  34.     return 1;  
#include <stdio.h>

int months[]={31,28,31,30,31,30,31,31,30,31,30,31, 
				};
int isLeap(int year)
{
	if((year%400==0)|| (year%4==0&&year%100!=0))
		return 1;
	else
		return 0;
}
int main()
{
	int days = 8113-1;//他出生的那天為第一天,所以這裡需要減去一
	int year = 1777;
	//printf("%d\n",isLeap(1778));
	for(int i=4;i<12;i++)
	{
		if(days>months[i])
		{
			days -= months[i];
			if(i==11)
				year++;
		}
	}
	while(days>364+isLeap(year+1))
	{
		year++;
		if(isLeap(year))
			days--;
	
		days -= 365;
	}
	for(i=0;i<12;i++)
	{
		if(days>months[i])
		{
			days-=months[i];
		
		} else {
			break;
		}
		
	}
	
	if(days==0)//如果days減為0,則說明days還是上一個月的最後一天
	{
		i--;
		if(i==-1)
		{
			i=11;
		}
		days = months[i];
		
	}
	int month = i+1;
	if(isLeap(year)&& month>2)
		days--;
	printf("%d-%02d-%02d\n",year,month,days);
	return 1;
}

結果為1799-07-16

PS:希望大家注意到他出生的那天為第一天,要不會多算一天的

2.排它平方數

小明正看著 203879 這個數字發呆 原來,203879 * 203879 = 41566646641這有什麼神奇呢?仔細觀察,203879 是個6位數,並且它的每個數位上的數字都是不同的,並且它平方後的所有數位上都不出現組成它自身的數字具有這樣特點的6位數還有一個,請你找出它!

再歸納一下篩選要求:

   1. 6位正整數

   2. 每個數位上的數字不同

   3. 其平方數的每個數位不含原數字的任何組成數位

答案是一個6位的正整數。

請通過瀏覽器提交答案

注意:只提交另一6位數,題中已經給出的這個不要提交。

注意:不要書寫其它的內容(比如:說明性的文字)

解析:這題說難不難,但就是很難得到正確答案。加上當時我考慮問題也不是很全面,就沒做出來這道水題

先說明一下,i為6位數i*i最多12位,int放不下,long也不行,__int64不知道行不,這個資料型別我沒怎麼用過,這裡就不說了我這裡直接用一個20位的陣列來存放i*i的結果,演算法就是模擬連小學生都會的錯位相加法。其次是判斷i各個位上的數字是否相同,這裡我用一個長度為10的陣列n,i中出現的數字作為陣列下標,然後遍歷i的每一位wei進行n[wei]++操作,最後判斷n中的值是否都為0 或1即可

  1. #include <stdio.h>  
  2. int n[10]; //用來判斷i各個位上的數字是否相同  
  3. char ch[20];//用來存放i*i的乘積  
  4. int isDifferent(int num)  
  5.     int ok = 1;  
  6.     n[num%10] ++;  
  7.     while((num/=10)!=0)  
  8.         n[num%10] ++;  
  9.     for(int i=0;i<10;i++)  
  10.         if(n[i]!=0&&n[i]!=1)  
  11.             ok = 0;  
  12.             break;  
  13.         return ok;  
  14. void init()  
  15.     for(int i=0;i<10;i++)   
  16.         n[i]=0;  
  17.     for(i=0;i<20;i++)   
  18.         ch[i]=0;  
  19. int main()  
  20.     for(int i=1e5;i<1e6;i++)  
  21.         if(isDifferent(i))  
  22.             int tmp = i;  
  23.             for(int j=0;j<6;j++)  
  24.                 int mul = (tmp%10)*i;  
  25.                 int index = j;  
  26.                     ch[index]+= mul%10;  
  27.                     if(ch[index]>10)  
  28.                         ch[index+1]+=ch[index]/10;  
  29.                     ch[index]%=10;  
  30.                     index++;  
  31.                 }while((mul/=10)!=0);  
  32.                 tmp/=10;  
  33.             int ok =1;  
  34.             for(int m=20;ch[m]==0;m--)  
  35.             for(;m>=0;m--)  
  36.                 for(int z=0;z<10;z++)  
  37.                     if(ch[m]==z&&n[z]==1)  
  38.                         ok=0;  
  39.                     if(ok)  
  40.                         printf("%d\n",i);  
  41.         init();  
  42.     return 0;  
#include <stdio.h>

int n[10]; //用來判斷i各個位上的數字是否相同
char ch[20];//用來存放i*i的乘積
int isDifferent(int num)
{
	int ok = 1;
	n[num%10] ++;
	while((num/=10)!=0)
	{
		n[num%10] ++;
	}
	for(int i=0;i<10;i++)
		if(n[i]!=0&&n[i]!=1)
		{
			ok = 0;
			break;
		}
		return ok;
}
void init()
{
	for(int i=0;i<10;i++) 
	{
		n[i]=0;
	}
	for(i=0;i<20;i++) 
	{
		ch[i]=0;
	}
}

int main()
{
	for(int i=1e5;i<1e6;i++)
	{
		if(isDifferent(i))
		{
			int tmp = i;
			for(int j=0;j<6;j++)
			{
				
				int mul = (tmp%10)*i;
				int index = j;
				do
				{
					ch[index]+= mul%10;
					if(ch[index]>10)
						ch[index+1]+=ch[index]/10;
					ch[index]%=10;
					index++;
				}while((mul/=10)!=0);
				tmp/=10;
			}
			int ok =1;
			for(int m=20;ch[m]==0;m--)
				;
			for(;m>=0;m--)
				for(int z=0;z<10;z++)
					if(ch[m]==z&&n[z]==1)
						ok=0;
					if(ok)
						printf("%d\n",i);
		}
		init();
	}
	return 0;
}

答案:346789

3 . 振興中華

小明參加了學校的趣味運動會,其中的一個專案是:跳格子。

地上畫著一些格子,每個格子裡寫一個字,如下所示:(也可參見p1.jpg)

從我做起振

我做起振興

做起振興中

起振興中華

比賽時,先站在左上角的寫著“從”字的格子裡,可以橫向或縱向跳到相鄰的格子裡,但不能跳到對角的格子或其它位置一直要跳到“華”字結束。要求跳過的路線剛好構成“從我做起振興中華”這句話請你幫助小明算一算他一共有多少種可能的跳躍路線呢?

答案是一個整數,請通過瀏覽器直接提交該數字

注意:不要提交解答過程,或其它輔助說明類的內容

解析:一看這題比較爽,這幾天做了不少這種題目了,很明顯就是樹的深度遍歷嘛哈哈!把每個格子都換成一個數字,從0算起,這樣,題目就變成了從0格跳到第7格的路線數目

  1. #include <stdio.h>  
  2. 從我做起振 01234 
  3. 我做起振興 12345 
  4. 做起振興中 23456 
  5. 起振興中華 34567 
  6. int a[4][5];  
  7. int sum;  
  8. void dfs(int row,int col,int index)  
  9.     if(a[row][col]!=index)  
  10.         return ;  
  11.     if(a[row][col]==index && index==7)  
  12.         sum++;  
  13.     else {  
  14.         if(row+1<4)  
  15.                 dfs(row+1,col,index+1);  
  16.         if(col+1<5)  
  17.                 dfs(row,col+1,index+1);  
  18. int main()  
  19.     int row,col;  
  20.     for(row=0;row<4;row++)  
  21.         for(col=0;col<5;col++)  
  22.             a[row][col]=row+col;  
  23.     dfs(0,0,0);  
  24.     printf("sum = %d\n",sum);  
  25.     return 0;  
#include <stdio.h>
/*
從我做起振 01234
我做起振興 12345
做起振興中 23456
起振興中華 34567
*/
int a[4][5];
int sum;
void dfs(int row,int col,int index)
{
	if(a[row][col]!=index)
		return ;
	if(a[row][col]==index && index==7)
		sum++;
	else {
		if(row+1<4)
				dfs(row+1,col,index+1);
		if(col+1<5)
				dfs(row,col+1,index+1);
	}
}
int main()
{
	int row,col;
	for(row=0;row<4;row++)
		for(col=0;col<5;col++)
			a[row][col]=row+col;

	dfs(0,0,0);
	printf("sum = %d\n",sum);

	return 0;
}
答案是:35

4 . 顛倒的價牌

    小李的店裡專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店

    其標價都是4位數字(即千元不等)

    小李為了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(參見p1.jpg)

    這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 68 9 0 都可以這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒著掛就是:8561,差了幾千元啊!!

    當然,多數情況不能倒讀,比如,1110 就不能倒過來,因為0不能作為開始數字

    有一天,悲劇終於發生了某個店員不小心把店裡的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!

    慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元

    請根據這些資訊計算:賠錢的那個價牌正確的價格應該是多少?

答案是一個4位的整數,請通過瀏覽器直接提交該數字

注意:不要提交解答過程,或其它輔助說明類的內容。

解析:這題讓我說什麼呢,什麼難的資料結構都沒有考,就是考的分析問題的能力哎,自己考試當時審題不細,沒看到價格是4位數,還在那裡苦逼的從3位數開始假設,哎,什麼時候也不能著急呀,心急吃不了熱豆腐

我這裡先找出差價在200到300的價格,沒找到一個就再去找差價在800到900的所有價格,兩個差價相減,若結果等於558,則得到所要結果

  1. #include <stdio.h>  
  2. #include <math.h>  
  3. int num[7]={1,2,5,6,8,9,0};  
  4. int replace[4];  
  5. int turn(int n)  
  6.     if(n==6)  
  7.         return 9;  
  8.     if(n==9)  
  9.         return 6;  
  10.     return n;  
  11. void f(int price1,int money)  
  12.     for(int a1=0;a1<6;a1++)  
  13.         for(int a2=0;a2<7;a2++)  
  14.             for(int a3=0;a3<7;a3++)  
  15.                 for(int a4=0;a4<6;a4++)  
  16.                     int sum1 = num[a1]*1000+num[a2]*100+num[a3]*10+num[a4];  
  17.                     replace[0] = turn(num[a1]);  
  18.                     replace[1] = turn(num[a2]);  
  19.                     replace[2] = turn(num[a3]);  
  20.                     replace[3] = turn(num[a4]);  
  21.                     int sum2 = replace[3]*1000+replace[2]*100+replace[1]*10+replace[0];  
  22.                     int tmp = abs(sum1-sum2);  
  23.                     if(tmp<900 && tmp > 800)  
  24.                         if(tmp-price1==558)  
  25.                             printf("money = %d\n",money);  
  26.                             return;  
  27. int main()  
  28.     for(int a1=0;a1<6;a1++)  
  29.         for(int a2=0;a2<7;a2++)  
  30.             for(int a3=0;a3<7;a3++)  
  31.                 for(int a4=0;a4<6;a4++)  
  32.                     int sum1 = num[a1]*1000+num[a2]*100+num[a3]*10+num[a4];  
  33.                     replace[0] = turn(num[a1]);  
  34.                     replace[1] = turn(num[a2]);  
  35.                     replace[2] = turn(num[a3]);  
  36.                     replace[3] = turn(num[a4]);  
  37.                     int sum2 = replace[3]*1000+replace[2]*100+replace[1]*10+replace[0];  
  38.                     int tmp = abs(sum1-sum2);  
  39.                     if(tmp<300 && tmp > 200)  
  40.                         f(tmp,sum1);  
#include <stdio.h>
#include <math.h>
int num[7]={1,2,5,6,8,9,0};
int replace[4];
int turn(int n)
{
	if(n==6)
		return 9;
	if(n==9)
		return 6;
	return n;
}
void f(int price1,int money)
{
	for(int a1=0;a1<6;a1++)
		for(int a2=0;a2<7;a2++)
			for(int a3=0;a3<7;a3++)
				for(int a4=0;a4<6;a4++)
				{
					
					int sum1 = num[a1]*1000+num[a2]*100+num[a3]*10+num[a4];
					replace[0] = turn(num[a1]);
					replace[1] = turn(num[a2]);
					replace[2] = turn(num[a3]);
					replace[3] = turn(num[a4]);
					int sum2 = replace[3]*1000+replace[2]*100+replace[1]*10+replace[0];
					int tmp = abs(sum1-sum2);
					if(tmp<900 && tmp > 800)
					{
						if(tmp-price1==558)
						{
							printf("money = %d\n",money);
							return;
						}
						
						
					}	
					
				}
}
int main()
{
	for(int a1=0;a1<6;a1++)
		for(int a2=0;a2<7;a2++)
			for(int a3=0;a3<7;a3++)
				for(int a4=0;a4<6;a4++)
				{
					
					int sum1 = num[a1]*1000+num[a2]*100+num[a3]*10+num[a4];
					replace[0] = turn(num[a1]);
					replace[1] = turn(num[a2]);
					replace[2] = turn(num[a3]);
					replace[3] = turn(num[a4]);
					int sum2 = replace[3]*1000+replace[2]*100+replace[1]*10+replace[0];
					int tmp = abs(sum1-sum2);
					if(tmp<300 && tmp > 200)
					{
						f(tmp,sum1);
						
					}	
					
				}
}

答案:9088,(看好題目讓你輸出那個)

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(______________________________) returnNULL;  //填空位置

       if(*needle)return NULL;

       returnhaystack_start;

請分析程式碼邏輯,並推測劃線處的程式碼,通過網頁提交

注意:僅把缺少的程式碼作為答案,千萬不要填寫多餘的程式碼符號或說明文字!!

解析:這題算是個水題吧,應該沒人會做錯。

答案:*(haystack++)!=*(needle++)

6. 逆波蘭表示式

    正常的表示式稱為中綴表示式,運算子在中間,主要是給人閱讀的,機器求解並不方便

    例如:3 + 5 * (2 + 6) - 1

    而且,常常需要用括號來改變運算次序

    相反,如果使用逆波蘭表示式(字首表示式)表示,上面的算式則表示為:

    -+ 3 * 5 + 2 6 1

    不再需要括號,機器可以用遞迴的方法很方便地求解

    為了簡便,我們假設:

   1. 只有 + - * 三種運算子

   2. 每個運算數都是一個小於10的非負整數

    下面的程式對一個逆波蘭表示串進行求值

    其返回值為一個結構:其中第一元素表示求值結果,第二個元素表示它已解析的字元數

struct EV

       int result;  //計算結果

       int n;       //消耗掉的字元數

struct EV evaluate(char* x)

       structEV ev = {0,0};

       structEV v1;

       structEV v2;

       if(*x==0)return ev;

       if(x[0]>='0'&& x[0]<='9'){

              ev.result = x[0]-'0';

              ev.n = 1;

              return ev;

       v1= evaluate(x+1);

       v2= _____________________________;  //填空位置

       if(x[0]=='+')ev.result = v1.result + v2.result;

       if(x[0]=='*')ev.result = v1.result * v2.result;

       if(x[0]=='-')ev.result = v1.result - v2.result;

       ev.n= 1+v1.n+v2.n;

       return ev;

請分析程式碼邏輯,並推測劃線處的程式碼,通過網頁提交

注意:僅把缺少的程式碼作為答案,千萬不要填寫多餘的程式碼、符號或說明文字!!

解析:這題考察的是遞迴,沒錯,又是遞迴,整套題一共10道,一半以上都要用遞迴,我記得去年遞迴考的也挺多的貌似

這題思路不是很難,主要是分析結構體struct EV中n元素的作用,為什麼要保留這個值,這個值的含義是什麼,把這個弄明白就差不多做出來這道題目了其實這程式就是把輸入的波蘭式字串分為了兩半部分,已經解析的和未解析的。把已經解析的值加上未解析的值就是最後的值了可以看出v1是已經解析的值,那麼v2就只能是未解析的值了。

evaluate(x+v1.n+1)

PS:當時由於考場氣氛比較緊張,加上自己時間沒把握好,怕大題沒時間做了,就考慮了30秒直接填了個evaluate(2+x),哈哈,扯淡了吧

7. 錯誤票據

    某涉密單位下發了某種票據,並要在年終全部收回。

    每張票據有唯一的ID號全年所有票據的ID號是連續的,但ID的開始數碼是隨機選定的。

    因為工作人員疏忽,在錄入ID號的時候發生了一處錯誤,造成了某個ID斷號,另外一個ID重號

    你的任務是通過程式設計,找出斷號的ID和重號的ID。

    假設斷號不可能發生在最大和最小號

要求程式首先輸入一個整數N(N<100)表示後面資料行數。

接著讀入N行資料

每行資料長度不等,是用空格分開的若干個(不大於100個)正整數(不大於100000)

每個整數代表一個ID號

要求程式輸出1行,含兩個整數m n,用空格分隔。

其中,m表示斷號ID,n表示重號ID

使用者輸入:

5 6 8 11 9

10 12 9

則程式輸出:

使用者輸入:

164 178 108 109 180 155 141 159 104 182 179118 137 184 115 124 125 129 168 196

172 189 127 107 112 192 103 131 133 169 158

相關推薦

2013藍橋 C/C++本科A 答案解析

1 .高斯日記  大數學家高斯有個好習慣:無論如何都要記日記。 他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210 後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用於浪費呢

2013 藍橋c/c++B預賽 解題報告

大半部分題目都是自己做的,可能還有存在錯誤的地方,還望各位指正。 有不會的題目,還請大牛們留下解題思路,謝謝了。 第一題:高斯日記 大數學家高斯有個好習慣:無論如何都要記日記。他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210。後來人們知道,

2013藍橋 C/C++本科A

今天做了一份題,還是很有收穫的,最大的收穫就是:自己還差得太遠。 1、高斯日記     大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,那個整數就是日期,它表示那一

2017藍橋省賽Java A--迷宮

標題:迷宮X星球的一處迷宮遊樂場建在某個小山坡上。它是由10x10相互連通的小房間組成的。房間的地板上寫著一個很大的字母。我們假設玩家是面朝上坡的方向站立,則:L表示走到左邊的房間,R表示走到右邊的房間,U表示走到上坡方向的房間,D表示走到下坡方向的房間。X星球的居民有點懶,

2017藍橋省賽Java A--9數算式

標題:9數算式觀察如下的算式:9213 x 85674 = 789314562左邊的乘數和被乘數正好用到了1~9的所有數字,每個1次。而乘積恰好也是用到了1~9的所有數字,並且每個1次。請你藉助計算機的強大計算能力,找出滿足如上要求的9數算式一共有多少個?注意:1. 總數目包

2017藍橋省賽Java A--方格分割

標題:方格分割6x6的方格,沿著格子的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖:p1.png, p2.png, p3.png 就是可行的分割法。試計算:包括這3種分法在內,一共有多少種不同的分割方法。注意:旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的

2016藍橋國賽-大學A 隨意組合(dfs)

描述 小明被綁架到X星球的巫師W那裡。 其時,W正在玩弄兩組資料 (2 3 5 8) 和 (1 4 6 7) 他命令小明從一組資料中分別取數與另一組中的數配對,共配成4對(組中的

六角幻方--詳解藍橋大賽Java本科B決賽

六角幻方題目要求: 把 1 2 3 ... 19 共19個整數排列成六角形狀,如下:     * * *    * * * *   * * * * *    * * * *      * * *要求每個直線上的數字之和必須相等。共有15條直線哦!再給點線索吧!我們預先填好

2014年藍橋試題(Java本科B)

1.標題:武功祕籍     小明到X山洞探險,撿到一本有破損的武功祕籍(2000多頁!當然是偽造的)。他注意到:書的第10頁和第11頁在同一張紙上,但第11頁和第12頁不在同一張紙上。     小明只想練習該書的第81頁到第92頁的武功,又不想帶著整本書。請問他至少要撕下多

2013藍橋試題(C/C++本科B

1 大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,

2013藍橋省賽C++B——1、高斯日記

題目標題: 高斯日記    大數學家高斯有個好習慣:無論如何都要記日記。    他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210    後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:

2013藍橋B(C/C++)預賽題目及個人答案(歡迎指正)

第一題: 題目標題: 高斯日記     大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,

算法筆記_204:藍橋軟件類決賽(Java語言C)

系統 主類 文字 新節點 origin pack log 破壞 src 目錄 1 好好學習 2 埃及分數 3 金蟬素數 4 橫向打印二叉樹 5 危險系數 6 公式求值 1 好好學習 湯姆跟爺爺來中國旅遊。一天,他幫助中國的小朋友貼標語。他負責貼的標語是分別寫在四

藍橋C++A 顛倒的價牌

標題:顛倒的價牌小李的店裡專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店。其標價都是4位數字(即千元不等)。小李為了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(參見p1.jpg)。這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:

山東省藍橋 ///題目標題: 高斯日記//c/c++

題目標題: 高斯日記     大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提

大臣的旅費——藍橋省賽C語言A10

問題描述 很久以前,T王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。 為節省經費,T國的大臣們經過思考,制定了一套優秀的修建方案,使得任何一個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重複經過大城市,從首都到達

逆波蘭表示式——藍橋省賽C語言A6

正常的表示式稱為中綴表示式,運算子在中間,主要是給人閱讀的,機器求解並不方便。 例如:3 + 5 * (2 + 6) - 1 而且,常常需要用括號來改變運算次序。 相反,如果使用逆波蘭表示式(字首表示式)表示,上面的算式則表示為: - + 3 * 5 + 2 6 1 不再需

2017藍橋C/C++ BC語言解法---等差數列

標題:等差素數列 2,3,5,7,11,13,…是素數序列。 類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。 上邊的數列公差為30,長度為6。 2004年,格林與華人陶哲軒合作證明了:存在任意長度的素數等差數列。 這是數論領域一項驚人的成果

2017藍橋C/C++ )B --C檔案操作解法及程式碼

標題: 購物單(C檔案操作解法及程式碼) 小明剛剛找到工作,老闆人很好,只是老闆夫人很愛購物。老闆忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。 這不,XX大促銷又來了!老闆夫人開出了長長的購物單,都是有打折優惠的。 小明也有個怪癖,不到萬不得已,從不刷卡,直接現金

2017藍橋C/C++)算式900--C語言解題思路和程式碼

標題:算式900 小明的作業本上有道思考題:看下面的算式: (□□□□-□□□□)*□□=900 其中的小方塊代表09的數字,這10個方塊剛好包含了09中的所有數字。 注意:0不能作為某個數字的首位。 小明經過幾天的努力,終於做出了答案!如下: (5012-4987