1. 程式人生 > >第七屆藍橋杯省賽A組

第七屆藍橋杯省賽A組

第一題:

煤球數目

有一堆煤球,堆成三角稜錐形。具體:
第一層放1個,
第二層3個(排列成三角形),
第三層6個(排列成三角形),
第四層10個(排列成三角形),
....
如果一共有100層,共有多少個煤球?

請填表示煤球總數目的數字。
注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字

找規律的題,注意1+2+3+4這樣每層的由來

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int a,b;
	int sum=0;
	int num=0;
	for(int i=1;i<=100;i++){
		num=num+i;//1+2+3+4這樣的規律 
		sum=sum+num;
	}
	cout<<sum;
}


第二題:


生日蠟燭

某君從某年開始每年都舉辦一次生日party,並且每次都要吹熄與年齡相同根數的蠟燭。

現在算起來,他一共吹熄了236根蠟燭。

請問,他從多少歲開始過生日party的?

請填寫他開始過生日party的年齡數。
注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。

直接暴力,先for第一次出生的日子,再for一個結束的日子,最裡面計算開始到結束經歷的總天數

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int flag=0;
	for(int i=0;i<236&&(flag==0);i++){
		for(int j=i;j<236&&(flag==0);j++){
			int sum=0;
			for(int k=i;k<=j;k++)
			sum=sum+k;
			if(sum==236)
			cout<<i;
		}
	} 
}


湊算式

       B      DEF
A + — + -——— = 10
       C       GHI

(如果顯示有問題,可以參見【圖1.jpg】)

這個算式中A~I代表1~9的數字,不同的字母代表不同的數字。

比如:
6+8/3+952/714 就是一種解法,
5+3/1+972/486 是另一種解法。

這個算式一共有多少種解法?

注意:你提交應該是個整數,不要填寫任何多餘的內容或說明性文字。

next_permutation的應用,如果沒有它,則需要寫一個製造1-9全排列的函式

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int sum=0;
	double b[10]={1,2,3,4,5,6,7,8,9};
	do{
		if(10==b[0]+b[1]/b[2]+(b[3]*100+b[4]*10+b[5])/(b[6]*100+b[7]*10+b[8]))
		sum++;
	}while(next_permutation(b,b+9));
	cout<<sum;
}

第六題:

方格填數

如下的10個格子

(如果顯示有問題,也可以參看【圖1.jpg】)

填入0~9的數字。要求:連續的兩個數字不能相鄰。
(左右、上下、對角都算相鄰)

一共有多少種可能的填數方案?

請填寫表示方案數目的整數。
注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。

標記即可,深搜加標記,對每個位置用陣列來表示

#include <stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
int a[11],vis[11];
int count;
void dfs(int x)
{
	if(x>10)//所有方格填數完畢 
	{
		if(abs(a[1]-a[2])>1 && abs(a[1]-a[4])>1 && abs(a[1]-a[5])>1 && abs(a[1]-a[6])>1 &&
		   abs(a[2]-a[3])>1 && abs(a[2]-a[5])>1 && abs(a[2]-a[6])>1 && abs(a[2]-a[7])>1 &&
		   abs(a[3]-a[6])>1 && abs(a[3]-a[7])>1 &&
		   abs(a[4]-a[5])>1 && abs(a[4]-a[8])>1 && abs(a[4]-a[9])>1 &&
		   abs(a[5]-a[6])>1 && abs(a[5]-a[8])>1 && abs(a[5]-a[9])>1 && abs(a[5]-a[10])>1 &&
		   abs(a[6]-a[7])>1 && abs(a[6]-a[9])>1 && abs(a[6]-a[10])>1 &&
		   abs(a[7]-a[10])>1 &&
		   abs(a[8]-a[9])>1 &&
		   abs(a[9]-a[10])>1)
			{
				//輸出每種情況 
//				for(int i=1;i<=10;i++)
//					printf("%d ",a[i]);
//				printf("\n");
				count++;
			}
	}
	for(int i=0;i<=9;i++)
		if(vis[i]==0)
		{
			vis[i]=1;//將用過的數標記 
			a[x]=i;//填數 
			dfs(x+1);//對下一個方格繼續填數 
			vis[i]=0;//清除標記 
		}
}
int main()
{
	count=0;
	dfs(1);
	cout<<count;
	return 0;
}

7.

剪郵票

         

如【圖1.jpg, 12張連在一起的12生肖的郵票。

現在你要從中剪下5張來,要求必須是連著的。

(僅僅連線一個角不算相連)

比如,【圖2.jpg】,【圖3.jpg】中,粉紅色所示部分就是合格的剪取。

 

請你計算,一共有多少種不同的剪取方法。

請填寫表示方案數目的整數。

注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。

//列舉5個點,然後dfs判斷聯通性 
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int cnt,dir[5]={-4,1,-1,4},a,b,c,d,e,vis[20];
void dfs(int i){
    if(cnt<5)
        for(int j=0;j<4;j++)
        {
            if((i==4||i==8)&&dir[j]==1) continue;//這個一開始忘了 
            if((i==5||i==9)&&dir[j]==-1) continue;
            int t=i+dir[j];
            if(cnt<5&&t>0&&t<13&&!vis[t]&&(t==b||t==c||t==d||t==e))
        {
            vis[t]=1;
            cnt++;
            dfs(t);
        }
        }
}
int main(){
    int ans=0;
    for(a=1;a<=12-4;a++)
    for(b=a+1;b<=12-3;b++)
    for(c=b+1;c<=12-2;c++)
    for(d=c+1;d<=12-1;d++)
    for(e=d+1;e<=12;e++)
    {
        memset(vis,0,sizeof(vis));
        cnt=1;
        dfs(a);
        if(cnt==5) ans++;
    }
    cout<<ans;
}

8.

四平方和

四平方和定理,又稱為拉格朗日定理:

每個正整數都可以表示為至多4個正整數的平方和。

如果把0包括進去,就正好可以表示為4個數的平方和。

比如:

5 = 0^2 + 0^2 + 1^2 + 2^2

7 = 1^2 + 1^2 + 1^2 + 2^2

^符號表示乘方的意思)

對於一個給定的正整數,可能存在多種平方和的表示法。

要求你對4個數排序:

0 <= a <= b <= c <= d

並對所有的可能表示法按 a,b,c,d 為聯合主鍵升序排列,最後輸出第一個表示法

程式輸入為一個正整數N (N<5000000)

要求輸出4個非負整數,按從小到大排序,中間用空格分開

例如,輸入:

5

則程式應該輸出:

0 0 1 2

再例如,輸入:

12

則程式應該輸出:

0 2 2 2

再例如,輸入:

773535

則程式應該輸出:

1 1 267 838

資源約定:

峰值記憶體消耗 < 256M

CPU消耗  < 3000ms

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
	double max,n,d;
	int flag=0;
	cin>>max;
	n=sqrt(max);
	int a,b,c;
	for(a=0;a<n;a++){
		for(b=0;b<n;b++){
			for(c=0;c<n;c++){
				d=sqrt(max-a*a-b*b-c*c);
				if(d==(int)d){//一定這兩個是相等的,取整和未取整的數是相等的
					flag=1;
				}
				if(flag==1)
				break;
			}
			if(flag==1)
			break;
		}
		if(flag==1)
		break;
	}
	cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
}


這些就是目前我能解決的題啦,革命尚未成功,同志仍需努力

相關推薦

2016年藍橋A試題

2016年第七屆藍橋杯省賽(C/C++) A組試題及參考答案 第七屆藍橋杯省賽結束了,趁著還有點印象,趕緊把答案記一下。 歡迎加入à程式設計學習交流QQ群:23228338,一起交流藍橋杯答案及程式設計交流學習。群檔案有答案下載 1.父親和兒子(列舉) 父親的年齡兩個數字

藍橋A

第一題:煤球數目有一堆煤球,堆成三角稜錐形。具體:第一層放1個,第二層3個(排列成三角形),第三層6個(排列成三角形),第四層10個(排列成三角形),....如果一共有100層,共有多少個煤球?請填

2016藍橋C試題及部分答案

答案都是自己理解的 1.報紙頁數 X星球日報和我們地球的城市早報是一樣的,都是一些單獨的紙張疊在一起而已。每張紙印有4版。比如,某張報紙包含的4頁是:5,6,11,12,可以確定它應該是最上邊的第2張報紙。我們在太空中撿到了一張X星球的報紙,4個頁碼分別是: 1125,11

藍橋 JavaB 生日蠟燭

某君從某年開始每年都舉辦一次生日party,並且每次都要吹熄與年齡相同根數的蠟燭。 現在算起來,他一共吹熄了236根蠟燭。 請問,他從多少歲開始過生日party的? 請填寫他開始過生日party的年齡

藍橋 JavaB 分小組

9名運動員參加比賽,需要分3組進行預賽。 有哪些分組的方案呢? 我們標記運動員為 A,B,C,... I 下面的程式列出了所有的分組方法。 該程式的正常輸出為: ABC DEF GHI ABC DEG FHI ABC DEH FGI ABC DEI FGH ABC DFG

2015年藍橋A(C/C++)

部分轉載自:http://blog.csdn.net/summonlight/article/details/61920048還有:https://zhidao.baidu.com/question/310414478.html1. 方程整數解方程: a^2 + b^2 +

藍橋C/C++ A題解

1.網友年齡某君新認識一網友。當問及年齡時,他的網友說:“我的年齡是個2位數,我比兒子大27歲,如果把我的年齡的兩位數字交換位置,剛好就是我兒子的年齡”請你計算:網友的年齡一共有多少種可能情況?提示:30歲就是其中一種可能哦.請填寫表示可能情況的種數。注意:你提交的應該是一個

【DFS填數】(2016)藍橋 C/C++ A 題解(三題)

第三題 題目     如圖,如下的10個格子,填入0~9的數字。要求:連續的兩個數字不能相鄰。  (左右、上下、對角都算相鄰)一共有多少種可能的填數方案?  請填寫表示方案數目的整數。思路分析     

2016年藍橋(C/C++ A)

此處有目錄↑ 基本都是暴力搜尋解決,最後兩道演算法題不會 - - 1.父親和兒子 (列舉) 父親年齡是兩位數,且比兒子大27歲,問有多少種可能的情況?(父親30歲,兒子3歲也符合題意) 直接列舉父親年齡即可 答案是:7 #include <cstdio

2016年藍橋C /C++ A 1~8題題解

部分轉載自:http://blog.csdn.net/idealism_xxm/article/details/50937688還有:http://blog.csdn.net/summonlight/article/details/61427968題目連線:http://ww

藍橋C/C++B題及答案

part 實現 void 整數 三層 在一起 idt mage 算法; 第一題 【題目】 煤球數目 有一堆煤球,堆成三角棱錐形。具體:第一層放1個,第二層3個(排列成三角形),第三層6個(排列成三角形),第四層10個(排列成三角形),....如果一共有100層,共有多少個煤

藍橋 Java 平方怪圈

平方怪圈 如果把一個正整數的每一位都平方後再求和,得到一個新的正整數。 對新產生的正整數再做同樣的處理。 如此一來,你會發現,不管開始取的是什麼數字, 最終如果不是落入1,就是落入同一個迴圈圈。 請寫出這個迴圈圈中最大的那個數字。 請填寫該最大數字。 注意:你提

藍橋試題1 煤球數目(遞推)

import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input=new Scanner(System.in); int n=100; long sum=0;

2016藍橋c/c++本科B試題總結及解題答案

第一題:煤球數目第i層的煤球陣列為(1+n)*n/2,答案:171700第二題:生日蠟燭思路:1 2 3 4 5 6……這一個等差數列的前n項和為(1+n)*n/2設從a歲開始過生日,到了b歲一共吹熄了236根蠟燭。即為:(a+b)(b-a+1)/2=236,答案:26for

藍橋Java語言C_小題答案

1:58497 2:171700 3:145 4:i + j+2 == k+1 || i + k+2 == j+1 || k + j+2 == i+1 5:s + " " + (char) (i

藍橋:2017年藍橋B十題—PREV-40K倍區間

膜拜這位大佬 做法:首先統計字首和sum[i] 表示A1+A2+…+Ai.所以對於任意一段區間[l,r]的和就是sum[r]-sum[l-1].如果要保證這個區間和為K倍數就是:(sum[r]-sum[l-1])%k == 0.變形後就是:sum[r]%k==sum[l-1]%k,

藍橋javaB題目解析

作者自己做完之後發現省賽的一幕其實是不難的,說實話,自己覺得題目難度還沒有PAT甲級的難度高。 而且作者做了這麼些天之後發現了,PAT甲級主要喜歡考資料結構方面的知識,而藍橋杯則喜歡考演算法這一類的,但是藍橋杯的演算法題目有些又不是很正規,因為作者有好些題目都是

藍橋JavaB五題圓周率

標題:圓周率    數學發展歷史上,圓周率的計算曾有許多有趣甚至是傳奇的故事。其中許多方法都涉及無窮級數。    圖1.png中所示,就是一種用連分數的形式表示的圓周率求法。    下面的程式實現了該求

藍橋JavaB六題奇怪的分式

標題:奇怪的分式    上小學的時候,小明經常自己發明新演算法。一次,老師出的題目是:    1/4 乘以 8/5     小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (參見圖1.pn

2017藍橋Java A--迷宮

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