1樓:匿名使用者
你的演算法有問題。程式設計之前先對這個問題進行數學分析。
易知,在分成同樣份數時,分成的各份相等時,積最大。
對於一個數字 n,將它分為 1/x 等份,即每份為 x,則總的積為 p = pow(x, n/x)。定義 f = pow(x, 1/x),則有 p = pow(f, n)。當且僅當 f 取最大值時,p 達到最大值。
而當 x = e(自然對數)時,f 最大。所以,應儘量使分成的各份接近 e。
由於要分成的各部分必須為整數。整數中最接近 e 的兩個整數為 2 和 3。由於 f(2) 因此,應該儘量使分成的各份等於 3。
當 n 能被 3 整除時,自然就份成 n/3 等份就可以了。若 n 除以 3 餘數為 1,分兩種情況考慮:(1) n=1 時,自然就不分了;(2) n>1 時,由於 3*1<2*2,因此,應分成 (int)(n/3)-1 個 3 和 2 個2。
當餘數為 2 時,就應分成(int)(n/3) 個 3 和 1 個 2.
程式如下:#include
int main()
while (num<0 ||num>100);
if (num%3 ==0) else if (num%3 ==1) else
return 0;
2樓:網友
貌似是你的演算法有問題,看看這個。
給定一個正整數n,則在n所有的分解式中,求因子乘積最大的一個分解及此乘積。
n=5時,有如下分解式:
在這些分解式中,3*2=6最大,這就是所要求的結果。
若n = 12,最大為3*3*3*3 = 81。
解法:這一題冒失需要窮盡所有的分解式,其實不然,通過分析資料可得出如下假設:
對任意一個正整數x>3,有i=x/3,j=x%3, 設s為分解式乘積最大的數。
當 j=0 時 s=3的i次方。
當 j=1 時 s=3的(i-1)次方*4
當 j=2 時 s=3的i次方*2
證明:首先我們證明將x分為3和2的組合得到的s最大。
1)首先證明當310,且x=a[0]+.a[k]時s最大,且a[i]不等於2和3
若a[i]>10,假設a[i]=10*l+m (m<10),明顯可知 若將a[i]分解為 l個10相加再加上m 得到的乘積為(10的l次方*m)不小於 a[i]。所有a中不可能存在大於10的數。
若0=s由此可以證明 將整數x 分解為2,3的組合 得到的s最大。又因為。
所有若出現3個2就應該轉換為兩個3
#include
void main()
break;
case 1:
count=count<<2;
break;
case 2:
count=count<<1;
break;
printf("%d %u",num,count);
解讀一下這個c程式?
3樓:匿名使用者
素數篩法求200以內的所有質數。
使用陣列標記每個數是否為質數,1表示是,0表示不是。
從最小的質數2開始,所有以2為質因數的數都不是質數。
即遍歷200以內2的所有的倍數,將它們都標記為0繼續遍歷陣列,若當前數i為質數,即為除已遍歷過的質數外最小的質數。
再將i所有的倍數都標記為0
最終陣列中所有標記為1的數即為200以內的所有質數。
新增註釋後的**和執行結果如下:
可見以十個數一行,列印出了200以內的所有質數。
有沒有c語言大神,給我講講這個程式怎麼執行?一步步詳細分析一下,拜託了 include void main while b 15 b 15執行迴圈cout ok 1214 16ok cfv呆呆獸 第一個程式是找出9到6之間不能被2整除或不能被3整除的數,所以輸出是98 7第二個程式是找出12到16之間的偶數,所以輸出是1214 16ok 整型 a a的植是10 執行a ... 有錯誤,我給你改了一下,請注意我給你加的註釋,建議放在vc 6.0下觀察,就容易發現你的錯誤了。加油!include include 這是sqrt函式需要用的一個庫函式int f int a 還有這個函式的呼叫,你寫的這個函式定義的位置不對,按你的寫法,應該把宣告的位置放在main函式內,然後把定義... select 查詢資料,具體內容如下 students.studentname,students表中的studentname欄位,符號 前為表名,後為欄位名 students.address,students表中的address欄位 students.email,students表中的email欄位...C 程式,請幫忙分析一下啊
本人自學C語言。請幫忙看一下下面這個程式有錯誤嗎
完整幫忙解讀一下,幫忙解讀一下女生 這句話的意思。盼愛情專家指導