藍橋杯試題 —— 四平方和
原題:
四平方和四平方和定理,又稱為拉格朗日定理:
每個正整數都可以表示為至多 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請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入…” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意: main 函式需要返回 0
注意: 只使用ANSI C/ANSI C++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include < xxx >, 不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。
嘗試作答:
#include <iostream> #include <cmath> using namespace std; int trying (int i, int r[], int time = 1, int keep = 0) { if (time != 5) { double rest = sqrt (i); int check = static_cast<int>(rest); if (rest == check) { r[time] = check; i = i - check * check + keep; keep = 0; trying (i, r, ++time, keep); } else { keep++; i--; trying (i, r, time, keep); } } return 0; } int main (){ int i,r[4]; cin>>i; trying(i, r); for (int a = 4; a > 0; a--) { cout<<r[a]<<" "; } cout<<endl; return 0; }
題後反思:
以上程式雖能計算出符合計算結果的 4 個正整數,但是部分結果與題目給出例項不同。
個人分析的原因是沒有對所有結果進行計算統計排序。待我研究了 “聯合主鍵升序排列” 之後再來試試。
相關推薦
藍橋杯試題 —— 四平方和
原題: 四平方和 四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多 4 個正整數的平方和。 如果把 0 包括進去,就正好可以表示為 4 個數的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1
藍橋杯/ACM 四平方和(優化列舉演算法)
四平方和 四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多4個正整數的平方和。 如果把0包括進去,就正好可以表示為4個數的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1^2 + 2^2
藍橋杯 8四平方和
思路:一開始我用了四個迴圈,但是這個有超時的危險,於是,d可以由a,b,c,n推出來; 程式碼: #include<cstdio> #include<algorithm&g
藍橋杯試題:四平方和 java(窮舉)
import java.util.Scanner; /* 練習題:四平方和 四平方和定理,又稱為拉格朗日定理:每個正整數都可以表示為至多四個正整數的平方和。如果把 0 包括進去, 就正好可以表示為四個數的平方和。 比如: 5=02+02+12+22 7=12+12+12+22 則對於一個給定的
藍橋杯 第七屆省賽試題 四平方和
四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多4個正整數的平方和。 如果把0包括進去,就正好可以表示為4個數的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7
2013年第四屆藍橋杯試題(Java本科B組)
1.標題: 世紀末的星期 曾有邪教稱1999年12月31日是世界末日。當然該謠言已經不攻自破。 還有人稱今後的某個世紀末的12月31日,如果是星期一則會.... 有趣的是,任何一個世紀末的年份的12月31日都不可能是星期一!! 於是,“謠言製造商”又修改為星期日....
2013年第四屆藍橋杯試題(C/C++本科B組)
1 大數學家高斯有個好習慣:無論如何都要記日記。 他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210 後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,
藍橋杯試題集
aaa 組合 fin std ext 如果 != ever 女朋友 藍橋杯搜索模擬暴力題: 題目: 手鏈樣式 小明有3顆紅珊瑚,4顆白珊瑚,5顆黃瑪瑙。 他想用它們串成一圈作為手鏈,送給女朋友。 現在小明想知道:如果考慮手鏈可以隨意轉動或翻轉,一共可以有多少不同的組合樣式呢
藍橋杯試題:十六進位制轉10進位制
問題描述 從鍵盤輸入一個不超過8位的正的十六進位制數字符串,將它轉換為正的十進位制數後輸出。 注:十六進位制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。 樣例輸入 FFFF 樣例輸出 65535 import java.util.Sc
2015年第六屆藍橋杯試題(C/C++本科B組)
1 有些人很迷信數字,比如帶“4”的數字,認為和“死”諧音,就覺得不吉利。雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某抽獎活動的獎券號碼是5位數(10-99),要求其中不要出現帶“4”的號碼,主辦單位請你計算一下,如果任何兩張獎券不重號,最多可發出獎券多少張。 請
歷屆藍橋杯試題- 迴文數字(C語言)
問題描述 觀察數字:12321,123321 都有一個共同的特徵,無論從左到右讀還是從右向左讀,都是相同的。這樣的數字叫做:迴文數字。 本題要求你找到一些5位或6位的十進位制數字。滿足如下要求: 該數字的各個數位之和等於輸入的整數。 輸入格式 一個正整數 n (10<n
2017年第八屆藍橋杯試題(C/C++本科B組)1-8題
1.標題: 購物單 小明剛剛找到工作,老闆人很好,只是老闆夫人很愛購物。老闆忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。 這不,XX大促銷又來了!老闆夫人開出了長長的購物單,都是有打折優惠的。 小明也有個怪癖,不到萬不得已,從不刷卡,直接
2016年第七屆藍橋杯試題(C/C++本科B組)
3.湊算式 B DEF A + --- + ------- = 10 C GHI (如果顯示有問題,可以參見【圖1.jpg】) 這個算式中A~I代表1~9的數字,不同的字母代表不同的數字。 比如: 6+8/3+952/
藍橋杯第四屆 黃金連分數(大數 斐波那契數列與黃金分割)
題目描述 標題: 黃金連分數 黃金分割數0.61803... 是個無理數,這個常數十分重要,在許多工程問題中會出現。有時需要把這個數字求得很精確。 對於某些精密工程,常數的精度很重要。也許你聽說過哈
java藍橋杯試題高精度加法
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in);
java藍橋杯試題時間轉換(java)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in);
藍橋杯試題集分類
每道題目都是連結,點選了之後需要登入才能訪問。 每個分類下空行隔開了不同難度,基本上越往下越難。 遞推求值 蘭頓螞蟻 分糖果 小朋友排隊 週期字串 迴文數字 並查集: 連號區間數 國王的煩惱 後兩類不加連結了
藍橋杯題 位平方和
把一個整數的每個數位都平方後求和,又得到一個整數,我們稱這個整數為:位平方和。 對新得到的整數仍然可以繼續這一運算過程。 比如,給定整數為4,則一系列的運算結果為:#include<stdio.h> int a[410]; int pingfanghe(int
2014年第五屆藍橋杯試題(Java本科B組)
1.標題:武功祕籍 小明到X山洞探險,撿到一本有破損的武功祕籍(2000多頁!當然是偽造的)。他注意到:書的第10頁和第11頁在同一張紙上,但第11頁和第12頁不在同一張紙上。 小明只想練習該書的第81頁到第92頁的武功,又不想帶著整本書。請問他至少要撕下多
藍橋杯試題集 演算法訓練 大小寫轉換
演算法訓練 大小寫轉換 時間限制:1.0s 記憶體限制:512.0MB 問題描述 編寫一個程式,輸入一個字串(長度不超過20),然後把這個字串內的每一個字元進行大小寫