四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多4個正整數的平方和。 如果把0包括進去,就正好可以表示為4個數的平方和。對於乙個給定的正整數,可能存在多種平方和的表示法。 要求你對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
1.巧妙列舉
2.雙重迴圈
#include
#include
#include
using
namespace std;
int n;
map<
int,
int>cache;
//對映
intmain()
}for
(int a=
0;a*a<=n/
4;a++)}
}}
每個方塊代表1~13中的某乙個數字,但不能重複。
比如:6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
1.轉化為全排列加檢查
#include
using
namespace std;
int ans;
int a=
;bool
check()
//全排列
voidf(
int k)
for(
int i=k;i<
13;i++
)/* if((k==2&&a[0]+a[1]!=a[2])||(k==5&&a[3]-a[4]!=a[5]))
continue;}*/
f(k+1)
;}}int
main()
如下的10個格仔,填入0~9的數字。要求:連續的兩個數字不能相鄰。 (左右、上下、對角都算相鄰)一共有多少種可能的填數方案?
1.全排列加檢查
#include
//全排列+檢查
#include
using
namespace std;
int a[10]
=;int ans;
bool
check()
//考慮第k個位置一般從零開始
voidf(
int k)
//嘗試將位置i與位置k交換
for(
int i=k;i<
10;i++)f
(k+1);
}}intmain()
把空位補齊檢查
#include
#include
using
namespace std;
int a[5]
[6];
int vis[10]
;int ans;
bool
check
(int i,
int j,
int a[
6])}
return
true;}
voidf(
int x,
int y,
int a[
6])//從0到9抓乙個
for(
int i=
0;i<
10;i++
)vis[i]=1
;if(y==4)
//到達右界換行
f(x+1,
1,a)
;else
f(x,y+
1,a);}
}}inti()
}int
main()
有12張連在一起的12生肖的郵票。 現在你要從中剪下5張來,要求必須是連著的。 (僅僅連線乙個角不算相連)。請你計算,一共有多少種不同的剪取方法。請填寫表示方案數目的整數
1.全排列
2連通性檢測
#include
#include
#include
using
namespace std;
int a[12]
=;//轉化為一維排列
int ans;
void
dfs(
int g[
4],int i,
int j)
bool
check()
}//連通檢測
int cnt=0;
for(
int i=
0;i<
3;i++
)for
(int j=
0;j<
4;j++)if
(g[i]
[j]==1)
return cnt==1;
}/*void f(int k)
for(int i=k;i<12;i++)
f(k+1);
}}*/
intmain()
while
(next_permutation
(a,a+12)
);cout<
return0;
}
星球的考古學家發現了一批古代留下來的密碼。這些密碼是由a、b、c、d 四種植物的種子串成的序列。仔細分析發現,這些密碼串當初應該是前後對稱的(也就是我們說的映象串)。 由於年代久遠,其中許多種子脫落了,因而可能會失去映象的特徵。
你的任務是:
給定乙個現在看到的密碼串,計算一下從當初的狀態,它要至少脫落多少個種子,才可能會變成現在的樣子。輸入一行,表示現在看到的密碼串(長度不大於1000) 要求輸出乙個正整數,表示至少脫落了多少個種子。
例如,輸入: abcba
則程式應該輸出: 0
再例如,輸入: abdcdcbabc 則程式應該輸出: 3
1.深搜比較
2.時間較長
#include
#include
using
namespace std;
char s[
10000];
intdfs
(char
*s,int left,
int right,
int cnt)
intmain()
2。動歸
#include
#include
#include
using
namespace std;
char s[
10000];
char
*rev
(char
*s)//最長公共序列
void
lcs(
char
*s1,
char
*s2)
for(
int j=
0;j)for
(int i=
1;i)for
(int j=
1;jcout<
[len-1]
;//return dp[len-1][len-1];
}int
main()
2023年藍橋杯比賽心得
通過半年準備,終於結束了今年藍橋杯。比賽結果暫時還不知道,但是通過這幾個月的經歷,分享一些自己心得。我的情況 三本院校,藍橋杯c c b組,大二 3 做真題可能是個捷徑,適合於時間不多的時候,但如果你離比賽還有很久,那麼看幾本演算法競賽的書也是不錯的,那時候我們老師推薦的劉汝佳的 演算法競賽入門 高...
2023年藍橋杯c c B組
能力有限,此處只有本人會的題目呀 煤球數目 有一堆煤球,堆成三角稜錐形。具體 第一層放1個,第二層3個 排列成三角形 第三層6個 排列成三角形 第四層10個 排列成三角形 如果一共有100層,共有多少個煤球?請填表示煤球總數目的數字。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。...
藍橋杯 2023年 搭積木
題目 第三題 搭積木 題目描述 小明最近喜歡搭數字積木,一共有10塊積木,每個積木上有乙個數字,0 9。搭積木規則 每個積木放到其它兩個積木的上面,並且一定比下面的兩個積木數字小。最後搭成4層的金字塔形,必須用完所有的積木。下面是兩種合格的搭法 01 2 3 4 5 6 7 8 9 03 1 7 5...