(解答33樓)簡單的程式設計題目給現在有興趣的大學生做做看

小弟從國高中開始有興趣寫程式,雖然寫過一些沒有說很有用的程式,也不是很有名,有看過的大大應該知道。


去年和最近都有幫同學或朋友看專題程式?(我不是專題指導老師~><~,麥來堆我啦~)

大概是讀三流大學的關係,普遍發現他們遇到問題?不知所措,不知道該怎麼辦?就算了~

可是好像也不是這樣!連我認識的國立知名的大學研究所學生,也不愛用Google,連他的學長說不用Google找資料?那可能你的東西會做不來會延畢喔!

所以想出兩個題目給01尚有興趣的大學生做?但是題目中有詐,這樣提示很明顯了。

題目一:
寫出1+2+3+........+999999999999的程式

題目二:
寫出找1......9999999999的找質數的程式

以上題目999999999是告訴大家是大數處理,並非是要用字串些連進位等方式,大家說的字串進位方式我高職寫vb用過一次。

真的是個很無聊的程式,有興趣看看好。

答案不要太快公佈喔!

題目二看起是有點難,解題者可以加上你是大學生幾年級?如是社會人士就加上社會人士。

我還是大學生。
一個話大家都說了,梯形公式,求出來就好,但我想說明一下。
一般人是會寫成這樣(當初我程式設計比賽寫這樣,我錯了)
#include <iostream>
#include <stdio.h>
using namespace std;

void main(){
unsigned double n,sum=0;
cout << "Enter n:";<br>cin >> n;

for(unsigned double i=1;i<=n;i++)
sum+=i;

cout << "1+2+3+...+n=" << sum << endl;<br>
system("pause");
//cin >> n;
}

後來改成
#include <iostream>
#include <stdio.h>
using namespace std;

void main(){
unsigned double n,sum=0;
cout << "Enter n:";<br>cin >> n;

/*for(unsigned double i=1;i<=n;i++)
sum+=i;*/

sum=(1+n)*n/2;

cout << "1+2+3+...+n=" << sum << endl;<br>
system("pause");
//cin >> n;
}

這公式是以前上高職時老師說的
1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+10+.....+ 98+99+100
+) 100+99+98+97+96+95+94+93+92+91+90+..+ 3+ 2+ 1
--------------------------------------------------------------
101+101+101+..............................+101 (這邊會產生100個101)

所以即為101*100=10100 不過這是有"兩"個1+2+3+...+100
所以101*100/2才會變成"一"個1+2+3+...+100,答案即為5050


我的程式碼2
#include <iostream>
#include <math.h>
using namespace std;

void main(){
int upper;
int lower;
bool Prime_Number=true;

cout << "Enter lower:";<br>cin >> lower;
cout << "Enter upper:";<br>cin >> upper;

if (lower == 1) lower =2;
for(int i=lower;i<=upper;i++){

for(int j=2;j<=int(sqrt(double( i )));j++){ // Sqrt( i );
if (i % j == 0) {
Prime_Number=false;
j=upper; // Break j,Next i;
}

}
if (Prime_Number) cout << i>Prime_Number=true;
}
cin >> lower;
}

最後~這真的不是我現在的作業,請各位版有不要誤會,我也不是用什麼不同的方法來問各位。
謝謝。

這個應該是從冼鏡光老師的書所出的題目吧~

書名好像是名題百則的樣子,對於剛學會程式設計的學生,這種邏輯思考的書幫助很大

記得裡面很多很怪的題目,真正解出來的只有十來題而已
攝影、腳踏車、登山、攀岩、潛水、露營、溪釣~多彩多姿~
題目二我們去年做過
但我忘了 還要想一下
可能要找找
題目一應該沒很難
我學的是java
大大說可以公布答案了我在交上吧
雖然說不一定是對的

如果是樓下說的那樣 那我已經錯了

還真懷念的題目…

哈…

主要就是要如何處理過於龐大的數值吧…

★這傢洗艾台玩啦!☆
我是社會人士
不過
我看不出哪裡有詐~
會是多出來的那個數字嗎?
這運算邏輯沒什麼困難的吧

困難的是~ 龐大資料串的處理邏輯和怎麼表現輸出結果
萬能的天神 請賜與我嘴砲的力量
詐是指加總後的結果吧?

題目一如果只看題目可能很簡單,不過要注意到各程式語言在處理超過數字型態的位數時產生的錯誤
題目二的詐...看不出來

我是俗稱三流大學出來但不認為自己學校是三流的社會人士
大學生們加油...
我也是看不出來哪裡有詐呢?
不過以我這個寫程式只有小學程度的,看不出來算是正常的.

第一題可以用偷吃步的做
1加到999999999999 = (1000000000000/2*1000000000000)+(1000000000000/2)-1000000000000
注意溢位的問題就好

好多0我現實中銀行數字後也有這麼多個0就好了.

第二題
除了2以外所有的偶數都不會是質數,
再來....以我小學的功力....,
有人有更好的公式嗎?
1+2+到999999999999999999999
直覺就是用for i=i+1 來寫
這樣每多一位9,程式就跑到累翻

如果是寫sum=n(n+1)/2 -n
寫得快也跑得快
chinohugo wrote:
1+2+到99999...(恕刪)



目前用double或是long還可以,
但萬一題目出到數目連型態n都無法接受這麼長的數字,用公式也無法計算
sum=n(n+1)/2 -n
更不用說用迴圈了 ,速度慢

我只想到用字元陣列處理的方式這種呆方式
類似
char a[1];
char b[1];
char sum[2];

While(b="99999999999999999999999999999999999999999")
{
..............................
...............................

for(i;i<=a.length-1;i++)
for(j;j<=b.length-1;j++)
{
sum=a[i]+b[j];// 字串相加處理
..................................................
}
//適當調整字串長度
redim sum[aum.length+1];
redim a[a.legth+1];
redim b[b.length+1];

}
隨便寫沒有考慮很清楚,可能還要處理a與b累加的問題
不知道有沒有更好方式?
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!