樓主: 林宇翔
打印 上一主題 下一主題

[提問] npsc 2013試題 A. 挑食的大胃王

[複製鏈接]
  • TA的每日心情
    開心
    2014-9-28 12:10
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    34

    主題

    181

    帖子

    776

    積分

    高級會員

    Rank: 4

    積分
    776

    程式設計達人 - 2014新手達陣

    11#
     樓主| 發表於 2014-8-25 17:10:57 | 只看該作者
    allenwhale 發表於 2014-8-25 16:21
    以你的code為例
    當e=0,f=0時
    不會存在rice[e-1][f] and rice[e][f-1] //rice[-1][0] and rice[0][-1] ...

    為甚麼執行的結果答案都錯
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<time.h>
    using namespace std;
    int main()
    {
    	ios::sync_with_stdio(false);
        cin.tie( NULL );
    	int t=0;//宣告變數 
    	int m=0,n=0,k=0;
    	cin>>t;//讀入測資數量 
    	int ans[t-1];
    	for(int times=0,ans_e=0;times<t;times++,ans_e++)//多測資輸入 
    	{
    		cin>>m>>n>>k;//m代表y軸,n代表x軸,k代表z軸 
    		int rice[m][n],g=0,h=0,i=0;
    		for(int e=0;e<m;e++)//讀入測資 
    		{
    			for(int f=0;f<n;f++)
    			{
    				cin>>rice[e][f];
    			}
    		}
    		for(int e=0;e<m;e++)//判斷是否為1,如果是1,將上下左右都編為2 
    		{
    			for(int f=0;f<n;f++)
    			{
    				if(rice[e][f] == 1)
    				{
    					rice[e][f]=2;
    					//cout<<"rice["<<e<<"]["<<f<<"]"<<endl;
    					rice[e-1][f]=2;
    					//cout<<"rice["<<e-1<<"]["<<f<<"]"<<endl;
    					rice[e][f-1]=2;
    					//cout<<"rice["<<e<<"]["<<f-1<<"]"<<endl;
    					if(rice[e+1][f] != 1)
    					{
    						rice[e+1][f]=2;
    						//cout<<"rice["<<e+1<<"]["<<f<<"]"<<endl;
    					}
    					if(rice[e][f+1] != 1)
    					{
    						//cout<<"rice["<<e<<"]["<<f+1<<"]"<<endl;
    						rice[e][f+1]=2;
    					}
    					
    					i=k-3;
    					
    				}
    				else //if(rice[e][f] == 0 && rice[e][f] != no)
    				{
    					rice[e][f]=0;
    				}
    			}
    		}
    		
    		for(int e=0;e<m;e++)//判斷有哪些是2 
    		{
    			for(int f=0;f<n;f++)
    			{
    				if(rice[e][f]==2)
    				{
    					h++;
    				}
    				else
    				{
    					g=(m*n)-h;
    				}
    				//cout<<"rice["<<e<<"]["<<f<<"]"<<endl;
    				//cout<<"g="<<g<<endl;
    				//cout<<"h="<<h<<endl;
    			}
    			//cout<<endl;
    		}
    		//cout<<i<<endl;
    		//cout<<(g*k)<<endl;
    		//cout<<(i*h)<<endl;
    		ans[ans_e]=(g*k)+(i*h);//將最後答案計算出來,儲存於陣列中
    		
    	}
    	
    	for(int e=0;e<t;e++)//顯示答案 
    	{
    		cout<<ans[e]<<endl;
    	}
    	cout<<clock();
    	return 0;
    }
    
    林宇翔
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    12#
    發表於 2014-8-25 17:29:17 | 只看該作者
    你這code連最基本的讀取都有問題,先看看這篇文章吧
    http://forum.tfcis.org/forum.php ... typeid%26typeid%3D8
    你的答案可以算完後就直接輸出,不用存起來在一起輸出。事實上你連這裡都是錯的。
    你先寫這一題試試http://zerojudge.tw/ShowProblem?problemid=a002
    看不到哈哈哈
    遊客,本帖隱藏的內容需要積分高於 250 才可瀏覽,您當前積分為 0

    點評

    耍我  發表於 2014-8-25 17:50
    但我寫這樣資料都有完整的進去阿  發表於 2014-8-25 17:42
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2014-9-28 12:10
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    34

    主題

    181

    帖子

    776

    積分

    高級會員

    Rank: 4

    積分
    776

    程式設計達人 - 2014新手達陣

    13#
     樓主| 發表於 2014-8-25 17:41:53 | 只看該作者
    你的答案可以算完後就直接輸出,不用存起來在一起輸出。事實上你連這裡都是錯的。

    他是所有測資都輸入完後才憶起輸出的
    如果直接輸出
    就會
    打入一次
    輸出一次

    點評

    輸入跟輸出是分開的兩回事  發表於 2014-8-25 17:45
    林宇翔
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2014-8-14 16:02
  • 簽到天數: 1 天

    [LV.1]初來乍到

    12

    主題

    138

    帖子

    863

    積分

    高級會員

    Rank: 4

    積分
    863

    台南一中資訊社新手達陣

    14#
    發表於 2014-8-25 17:46:58 | 只看該作者
    林宇翔 發表於 2014-8-25 17:41
    他是所有測資都輸入完後才憶起輸出的
    如果直接輸出
    就會

    題目應該沒說要一次輸出吧
    再說你思考一下,如果"輸入一次輸出一次"跟"一次輸出",對輸出檔會有甚麼不同嗎?
    理論上會是一樣的東西吧,而且當輸入很多筆的時候,你不可能會有那麼多空間可以先存起來再輸出

    至於這題,你可以參考 http://forum.tfcis.org/forum.php ... ;tid=105&extra=

    點評

    printf 是 C 的輸出 cout 是 C++ 的輸出  發表於 2014-8-25 17:57
    我跟他的思考模式一樣  發表於 2014-8-25 17:56
    printf 是啥  發表於 2014-8-25 17:55
    我補我的code上去好了  發表於 2014-8-25 17:51
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2014-9-28 12:10
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    34

    主題

    181

    帖子

    776

    積分

    高級會員

    Rank: 4

    積分
    776

    程式設計達人 - 2014新手達陣

    15#
     樓主| 發表於 2014-8-25 17:51:23 | 只看該作者
    Sylveon 發表於 2014-8-25 17:29
    你這code連最基本的讀取都有問題,先看看這篇文章吧
    http://forum.tfcis.org/forum.php ... typeid%26typei ...

    這題我對

    點評

    你既然這題對就應該知道不用先存起來再輸出吧  發表於 2014-8-25 17:53
    林宇翔
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2014-9-28 12:10
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    34

    主題

    181

    帖子

    776

    積分

    高級會員

    Rank: 4

    積分
    776

    程式設計達人 - 2014新手達陣

    16#
     樓主| 發表於 2014-8-25 17:58:04 | 只看該作者
    Sylveon
    那份隱藏的東西到底是啥

    點評

    我猜就算看到,不會的人也沒辦法看出作法精妙(!?)的地方  發表於 2014-8-25 18:03
    加油 你差32積分就可以看到了  發表於 2014-8-25 17:58
    林宇翔
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    17#
    發表於 2014-8-25 17:58:38 | 只看該作者
    不跟你喇了

    看最簡單的一點
    #code
  • cin>>t;//讀入測資數量
  • int ans[t-1];
  • 你自己想想,給你C99標準好了,你今天有t個答案,但是你只有t-1個格子放答案,你覺得這合理嗎? 更不用說陣列大小要是常數這件事了。

    點評

    我是因為陣列都從零開始計算 所以才想說用t-1個格子  發表於 2014-8-25 18:08
    哇~戳中盲點了  發表於 2014-8-25 18:00
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2014-9-28 12:10
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    34

    主題

    181

    帖子

    776

    積分

    高級會員

    Rank: 4

    積分
    776

    程式設計達人 - 2014新手達陣

    18#
     樓主| 發表於 2014-8-25 18:09:55 | 只看該作者
    memset
    是啥

    點評

    memset 你可以把它當成清空陣列的東西 詳細的內容以後再慢慢了解 吃飯ing~~~  發表於 2014-8-25 18:30
    林宇翔
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2014-9-28 12:10
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    34

    主題

    181

    帖子

    776

    積分

    高級會員

    Rank: 4

    積分
    776

    程式設計達人 - 2014新手達陣

    19#
     樓主| 發表於 2014-8-25 18:21:18 | 只看該作者
    人都不見了

    點評

    吃飯中...  發表於 2014-8-25 18:23
    林宇翔
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    20#
    發表於 2014-8-25 18:40:15 | 只看該作者

    真糟糕,這東西可以解釋的很隨便,但是你有可能誤用,但是解釋得太詳細又要花時間。
    參考資料:
    http://www.cplusplus.com/reference/cstring/memset/
    http://jax-work-archive.blogspot.tw/2011/07/c-memset.html


    標頭 memory.h 不過通常用的是cstring
    函數原型: void * memset ( void * ptr, int value, size_t num );

    功能:可以快速設定一個連續的記憶體區塊(ex.陣列)的數值

    參數說明:
    ptr:作用對象的指標
    value:欲初始化的值
    num : 填充數量


    回傳值:
    ptr本身

    常見用法:
    1.把陣列所有元素都設定為0。
    在這範例裡,我們使用sizeof()運算子直接取得陣列所佔的記憶體大小。
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<memory.h>
    using namespace std;
    
    int main()
    {
            int arr[5]= { 1,2,3,4,5 };
            
            memset( arr , 0 , sizeof(arr) );
            //sizeof(arr) = sizeof(int)*5
            for(int i=0;i<5;++i)
            {
                    cout<<arr[i]<<' ';
            }
    }


    要注意,填充的單位為「位元組」,所以在這裡的sizeof(arr)不等於5,而是等於5乘以每一個int所佔的位元組
    再這種用法中除了0之外,常用的還有-1,0x3F,0x7F,後兩個通常用來代表初始化為無限大

    點評

    http://forum.tfcis.org/thread-468-1-1.html  發表於 2014-8-25 18:47
    回復 支持 反對

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表