• 5

請教C語言的邏輯

poll wrote:
那我也提供一下剛接觸...(恕刪)



C++版

int num, center;

cout << "請輸入一個奇數:";
cin >> num;

center = num / 2 + 1;

int temp;
for (int i = 0; i < num; ++i) {
  temp = i < center ? i : num - i - 1 ;
  for (int j = 1; j <= num; ++j) {
    if (center >= j-temp && center <= j+temp)
      cout << "*";
    else cout << "0";
  }
  cout << "\n";
}
提供你思考的方向....

以前在01上有類似的問題...
http://www.mobile01.com/topicdetail.php?f=300&t=453407&p=2
請參考第18樓解法...

看到也試著做C++版的......

#include <iostream>
using namespace std;
void main()
{
int x,y,z;
int r;
cout<<"請輸入一個奇數:";
cin>>r;
for(int a=1;a<=(r+1)/2;++a){
for(x=(r+1)/2;x>a;--x){
cout<<" ";
}
for(y=1;y<(a*2);++y){
cout<<"*";
}
for(z=(r+1)/2;z>a;--z){
cout<<" ";
}
cout<<endl;
}
system("pause");
}

新手獻醜了
fake802 wrote:


這種題目,會的人...(恕刪)


前面的宣告不寫了

printf("ooooo*ooooo\n");
printf("oooo***oooo\n");
printf("ooo*****ooo\n");
printf("oo*******oo\n");
printf("o*********o\n");
printf("***********\n");


語法或許有錯
別挑毛病
我已經退隱江湖多年了
是不是有辦法在一分鐘之內辦到
也不是最重要的重點
重點是
看看到目前為止各位的解法
都是工程師的想法
不錯
很優秀
但公司會在一分鐘之內考這樣的問題
其實不完全在考功力
而是在考你的應變能力與EQ
上面這樣的程式
是不是一樣能達到客戶的需求?
客戶要的是結果
而且最好是在最短的時間內看到成果
甚至是能隨時應變的方案
===>不是要張顯你功力的高深
上面的程式以程式設計師的眼光會覺得有點嗤之以鼻
但以一個不太懂C(or C++)的人來說(這種人通常當上司或客戶,呵呵,有沒有覺得你很悲哀)
說不定他自己都能修改程式達到他想要的新的結果
也就是程式相當的易懂易維護
花的時間也少(用copy past 要花一分鐘的時間嗎?)
其實這樣也不失為一個方式
不是嗎?

這反應出台灣業界的想法
我們總是從技術面出發
所以實作方面台灣很強
但作品是給人用的
有太多東西不是只有技術面所能cover到的
我們的整個環境與教育
壓抑了最重要的
==>創造力
我們培養了一群工蟻
做著工蟻的事情(代工)
過個工蟻的生活(加班)
始終無法像蟻后一樣展翅高飛
因為我們缺乏了那對展翅高飛的翅膀===>創造力
希望台灣有所覺悟
真的
因為我相信裝上翅膀的工蟻
要四處攻城掠地
應該是所向披靡的
程式是用來處理資料
是把有用的資料處理出來
也是 分析 處理資料問題的一個能力
不要陷入語法迷思....

為了簽名而簽名..
stevenchenabc wrote:
前面的宣告不寫了pr...(恕刪)

這位大哥寫的漏漏長,好像把樓主的題目看漏了一向重要的條件
"輸入一個奇數"
這樣客戶對你的結果應該不滿意吧.
面試這樣的答案應該是判定做工程助理給你多看Spec歐
VB版

oo*oo
o***o
*****


x = 5
For i = 1 To x Step 2
Debug.Print String(((x - i) \ 2), "o") & String(i, "*") & String(((x - i) \ 2), "o")
Next i



    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *


w = 4

For i = w To -w Step -1
Debug.Print Space(Abs( i )) & String((w - Abs( i )) * 2 + 1, "*")
Next i

一整個亂寫...太久沒寫畫圖的....囧rz...
樓主對不起...偏離你的主題...不是用C寫的...

stevenchenabc wrote:

這反應出台灣業界的想法
我們總是從技術面出發
所以實作方面台灣很強
但作品是給人用的
有太多東西不是只有技術面所能cover到的
我們的整個環境與教育
壓抑了最重要的
==>創造力
我們培養了一群工蟻
做著工蟻的事情(代工)
過個工蟻的生活(加班)
始終無法像蟻后一樣展翅高飛
因為我們缺乏了那對展翅高飛的翅膀===>創造力
希望台灣有所覺悟
真的
因為我相信裝上翅膀的工蟻
要四處攻城掠地
應該是所向披靡的



創造力不是什麼都沒有就能生出來的,這點我看法和你相反。
事實上,我認為能快速寫出這些程式是軟體工程師的基本,
當你把這些東西能吃飯喝水一樣習慣的時候,才有多餘的
能力去發揮你所謂的創造力,實際上大部分好的產本都是
必須建立在穩固的技術基礎上。

你的講法適用於台灣軟體業,因為這是一個進入門檻很低的行業,
台灣優良的程式設計師都在硬體廠,軟體幾乎都是挑剩下來的人,
所以看到大部分的人能力不足是非常正常的。

軟體實作台灣很強? 那美國軟體外包不會丟到印度去,
實際上我們的軟體功力有沒有硬體一半可能都不知道,
在這種基礎上講創造力,那就真的只能大家碰碰運氣了。

stevenchenabc wrote:
前面的宣告不寫了pr...(恕刪)


我覺的大大講的對一半也錯一半

寫程式不是寫藝術品
是要賣錢的
但是該留後路的程式 就要留
不要現在挖洞給以後自己跳


因為畫三角的case可以看你對這個案子的解法有問題

今天老版要你畫這個三角
對 你求快 耍聰明 很快給老闆這個解法
明天老闆又想說 高= 8的三角型不夠用 我們來個高 = 9

你又加了一行 printf 也很快
時間久了 身上案子越攬越多
一年後 老闆說 我們來個高= 100的三角型
這時後你就要放下手間工作 去把一年前程式翻出來
要嘛就加91行的printf湊到高= 100
要嗎 就花個幾分鐘改成用迴圈

但是不要忘了
這只是三角型
在職場 就不是三角型了

明明一年前
高= 8
高 = 9
跟一年後
高 = 10 都做很快
為什麼變到高 = 100
工作進度上就花了一天時間
也因為一年來累積了一堆這種沒收尾的東西
一直要你去改才抱怨事情做不完

我上述想表達的當然寫程式不是寫藝術品
是要賣錢的

但是該留後路的程式 就要留
不要現在挖洞給以後自己跳

===========================================

以下在給對程式語言有興趣的學生一點建議

很多學校在教程式時

都不會教你怎麼Debug

通常coding 的時間是30%
Debug是 70%

今天照我們的想法把畫三角型的程式碼寫出來
但是一執行
歪七紐巴
這時最好用逐步執行去一步步看你的程式碼跑的流程是不是跟你想的一樣
因為有時後你的想法正確
但是因為coding的關係
這邊少加一個 printf("\n"); 那間少加一個什麼
就畫的歪七扭巴

也可以藉由debug的動作去陪養跟程式在Run時一樣的思考流程

這種基本功常做 做久了之後 差不多三年後很多程式都可以用看的就知道問題出在那

像柯南講的 程式會有bug 真相只有一個

vc .NET的偵錯選單


其他學校常用的C開發環境找不到偵錯功能的可以去請教老師
老師應該會很熱意教導
int num;
cin>>num;
char* spaceStr = new char[num + 1];
char* starStr = new char[num * 2 +1];
for (int i = 0; i <= num; i++)
{
memset(spaceStr,' ',num + 1);
spaceStr[num - i] = '\0';
memset(starStr,'*',num * 2 + 1);
starStr[i*2 + 1] = '\0';
cout<<spaceStr<<starStr<<spaceStr<<endl;
}
delete[] spaceStr;
delete[] starStr;

一個loop的寫法
寫法很多 認真想就有很多不同的寫法
硬幹的暴力 也是一種方法
  • 5
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?