1. 程式人生 > >【計蒜客系列】挑戰難題26:等差數列

【計蒜客系列】挑戰難題26:等差數列

一個等差數列是一個能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的數列。
在這個問題中a是一個非負的整數,b是正整數。寫一個程式來找出在雙平方數集合(雙平方數集合是所有能表示成p2+q2的數的集合)S中長度為n的等差數列。
輸入包括兩行,第一行為N要找的等差數列的長度(3≤ N≤25)。第二行是找到的雙平方數p和q的上界M(0≤p,q≤M)。
輸出一行或者多行,如果沒有找到數列,輸出NONE。否則輸出一個整數對a b(這些行應該先按b排序再按a排序)
樣例1
輸入:
5
7
輸出:
1 4
37 4
2 8
29 8
1 12
5 12
13 12
17 12
5 20
2 24

注:本題確實沒有看懂,程式碼參考網上的,在此貼出來,大家看看就好。不喜勿噴。

#include<iostream>
#include<cstring>
using namespace std;
bool is[125001];
int a[125001];
int main() {

	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 0; i <= m; ++i)
		for (int j = 0; j <= m; ++j)
			is[i * i + j * j] = 1;
	int k = 0;
	for (int i = 0, z = m * m * 2; i <= z; ++i)
		if (is[i])
			a[k++] = i;
	int l = 1, ma = (m * m * 2 - 0) / (n - 1);
	int nu = 0;
	for (; l <= ma; ++l) {
		for (int i = 0; a[i] + (n - 1) * l <= m * m * 2 && i < k; ++i) {
			bool f = 1;
			for (int j = 1; j < n && f; ++j)
				if (!is[a[i] + j * l]) {
					f = 0;
				}
			if (f) {
				printf("%d %d\n", a[i], l);
				++nu;
			}
		}
	}
	if (!nu)
		puts("NONE");
	return 0;
}




相關推薦

系列挑戰難題26等差數列

一個等差數列是一個能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的數列。 在這個問題中a是一個非負的整數,b是正整數。寫一個程式來找出在雙平方數集合(雙平方數集

系列挑戰難題28等和的分隔子集

曉萌希望將1到N的連續整陣列成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於N=3,對應的集合{1,2,3}能被劃分成{3} 和 {1,2}兩個子集合. 這兩個子集合中元素分別的和是相等的。 對於N=3,我們只有一種劃分方法,而對於N=7時,我們將有4種

系列挑戰難題18跳躍遊戲

給定一個非負整數陣列,假定你的初始位置為陣列第一個下標。 陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。 請確認你是否能夠跳躍到陣列的最後一個下標。 例如: A = [2,3,1,1,4], return true. A = [3,2,1,0,4], return

系列挑戰難題29奇異家庭

有一種奇怪的大家族,這種家族裡的人要麼沒有孩子,要麼就有兩個孩子。已知某個這種家族共有N個人,家族中共有K代人。你能告訴我這樣的一個家族可能的家譜結構的種數除以9901的餘數是多少嗎? 輸入包括一行

系列挑戰難題24函式規律

題目來源:計蒜客 下面我將描述一個簡單的函式: f(8)=2 f(16)=1 f(32)=0 f(2048)=3 讀入一個x(1≤x≤101000),請你找出f(x)的值。 輸入包括一行,僅一個數字x

系列挑戰難題8字串長度

在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成,在不修改函式原型的情況下,請完成str_len函式,實現我們上述的功能吧。 樣例1 輸入

系列挑戰難題20跳躍遊戲二

給定一個非負整數陣列,假定你的初始位置為陣列第一個下標。 陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。 你的目標是到達最後一個下標,並且使用最少的跳躍次數。 例如: A = [2,3,1,

系列挑戰難題17x的平方根

設計函式int sqrt(int x),計算x的平方根。 格式:    輸入一個數x,輸出它的平方根。直到碰到結束符號為止。    千萬注意:是int型別哦~    輸入可以如下操作: while(cin>>x) 或者 while(scanf("%d", &a

系列挑戰難題9元素移除

如:A[] = {1, 2, 3, 4, 5}, 要刪除數字3, 那麼返回陣列長度為4. 親愛的小夥伴們,題目是不是很簡單呢? 提示: int removeElement(int A[], int n, int elem) 其中,n代表陣列長度,elem代表要刪掉的元

系列挑戰難題16爬樓梯

假設你現在正在爬樓梯,樓梯有n級。每次你只能爬1級或者2級,那麼你有多少種方法爬到樓梯的頂部? 格式:    第一行輸入一個數n(n<=50),代表樓梯的級數。    接下來一行輸出你的方法

系列挑戰難題23:計數和數數

“伯爵說”序列如下:1, 11, 21, 1211, 111221, ...1 讀作 "one 1" 或者 11。11 讀作 "two 1s" 或者21。21 讀作 "one 2, one 1" 或者 1211。 格式:多組輸入,讀到檔案結束。每組輸入給定一個整數n,輸出

習題聖誕樹

clu 簡單 continue 先來 運算符 opera 整數 node 最短路問題 問題描述聖誕節快到了,蒜頭君準備做一棵大聖誕樹。這棵樹被表示成一組被編號的結點和一些邊的集合,樹的結點從 1 到 n 編號,樹的根永遠是 1。每個結點都有一個自身特有的數值,稱為它的權重,

習題蒜頭君運送寶藏

scan 中一 put 中間 lca fat through 但是 con !!!原來LCA的題可以出的這麽難,完了這還屬於水題?! 先來解釋一下題意,有N個城市,在這N城市之間有M條邊(不一定每個城市都有邊)。我們的任務是找出給定兩個點之間路徑上的最小邊權

字串長度

題目描述 在右側我們給出了一個已經基本完成的程式,讀入了一個字串, 呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成, 在不修改函式原型的情況下,請完成str_len函式,實現我們上述的功能吧。  樣例

奇怪的國家

題目描述 有一個奇怪的國家,裡面的國民對於事情的態度永遠只有兩面。 當兩個人遇到一起討論一個事情的時候——兩個持贊同觀點的人遇到一起後會對這個事情都繼續贊同; 一個持贊同觀點的人遇到一個持不贊同觀點的人的時候,兩人都會不再繼續贊同; 兩個持不贊同觀點的人遇到一起討論後反而會對這個事情開始贊同

泥塑課

題目描述 小米是一個幼兒園老師,每學期的泥塑課上,她都會給每個學生髮不超過 250立方厘米的等量橡皮泥,教大家做泥塑。 在上課過程中,她發現每個班都恰好有一個小朋友會去搶另一個小朋友的橡皮泥,於是她決定,在正式開始做泥塑前, 讓大家把手裡的橡皮泥都捏成一個立方體,並且測量手裡捏好的橡皮泥的長

矩陣翻轉

題目描述 曉萌最近在做一個翻轉圖片的應用,你可能也知道,圖片其實是由一個個的點組成的。 於是,曉萌想先做一個可以翻轉矩陣的程式,來解決他問題的核心部分。 輸入格式 輸入第一行包括由空格分開的整數 M,N,T(0 < N,M < 200),T的值為 0或 1。 其中 M和 N分

簡單斐波那契

題目描述 斐波那契數列是一種非常有意思的數列,由 0和 1開始,之後的斐波那契係數就由之前的兩數相加。 用數學公式定義斐波那契數列則可以看成如下形式: F0 = 0 F1 = 1 Fn = F(n-1)+F(n-2) 我們約定Fn表示斐波那契數列的第 n項,你能知道斐波那契數列中的任何一項嗎

判斷質數

題目描述 對於大於 1的數,如果除了 1和它本身,它不能再被其它正整數整除,那麼我們說它是一個質數。 曉萌想判斷一個數是不是質數,希望找你寫個程式,幫助她進行判斷。 輸入格式 輸入包括一行,為一個整數N(1<N≤1000),正是曉萌給出你讓你判斷的數字。 輸出格式 輸出包括一行,如

整除問題

題目描述 判斷一個數是否能被另一個整數整除是一個挺簡單的問題,一般一個模運算就可以搞定了, 懶惰的曉萌還是不想自己做,於是找到你幫他寫程式碼,你就幫幫他吧。 輸入格式 輸入包括兩個由空格分開的整數 M和N(1≤M,N≤500)。 輸出格式 輸出包括一行,如果 M可以被 N整除就輸出Y