2014年5月29日 星期四

2013 國中組初賽-題目 A 挑食的大胃王

[解法ㄧ] #include<iostream>
using namespace std;
int main(){
int T,M,N,K,ans;
cin>>T;
while(T--){
ans=0;
cin>>M>>N>>K;
int eat[M][N];

for(int i=0;i<M;i++){            //輸入原始陣列值
for(int j=0;j<N;j++){
cin>>eat[i][j];
}
}


for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
if(eat[i][j]%2==1){          //除以2餘數等於1
if(i-1>=0)               //將會被挖掉的位置確定
eat[i-1][j]+=2;     //eat[i][j]=eat[i][j]+2
if(j-1>=0)
eat[i][j-1]+=2;
if(i+1<M)
eat[i+1][j]+=2;
if(j+1<N)
eat[i][j+1]+=2;
eat[i][j]+=2;
}
}
}


for(int i=0;i<M;i++){               //計算出會被挖掉的值
for(int j=0;j<N;j++){
if(eat[i][j]){
ans++;                  //ans=ans+1
}
}
}
if(K>=3)                            //可食用的白飯量
       cout<<N*M*K-ans*3<<endl;
else
cout<<N*M*K-ans*K<<endl;  
}
return 0;

[解法二]
#include <cstdio>
#include <cstring>
int main()
{
int T , M , N , K , Map[60][60] , Answer;
scanf("%d",&T);
while( T-- )
{
scanf("%d%d%d",&M,&N,&K);

memset( Map , -1 , sizeof(Map) );      //設定陣列內的值全為-1

for( int i = 1; i <= M; i++ )          //輸入原始陣列值
for( int j = 1; j <= N; j++ )
scanf("%d",&Map[i][j]);

Answer = 0;

for( int i = 1; i <= M; i++ )               //尋找位置上的值=1時, 將附近的位置替換成-1,
for( int j = 1; j <= N; j++ )           // 且計數本身及被替換的位置數量
{
if( Map[i][j] != 1 )continue;      
else
{
Answer++;
if( Map[i-1][j] == 0 )Answer++ , Map[i-1][j] = -1;
if( Map[i+1][j] == 0 )Answer++ , Map[i+1][j] = -1;
if( Map[i][j-1] == 0 )Answer++ , Map[i][j-1] = -1;
if( Map[i][j+1] == 0 )Answer++ , Map[i][j+1] = -1;
}
}
printf("%d\n",M*N*K-Answer*3);


}
return 0;
}
資料來源:
NPSC補完計劃 http://www3.tcgs.tc.edu.tw/npsc/index.php

NPSC補完計劃

2014年5月28日 星期三

使用memset加快二維陣列初始

一般方法是用雙迴圈來設定二維陣列的值
這裡使用memset來設定陣列初值

#include <cstring>

const int X_SIZE = 60;
const int Y_SIZE = 30;

int matrix[X_SIZE][Y_SIZE];

inline void init_matrix() //使用inline加快
{
  //設定陣列內的值全為-1
  memset(matrix, -1, sizeof(matrix)); 
}

PS:
memset(matrix, 1, sizeof(matrix)); //會失敗
memset為字元填入的函式,整數由2或4個位元組(字元)組成
設定的值是0x01,但存入的值卻是0x0101,而導致錯誤的答案
而-1則是0xFF,存入的值是0xFFFF,不會影響答案



原始文章出處:http://jhengjyun.blogspot.tw/2010/02/cc-memset.html

2014年5月27日 星期二

2014年3月14日 星期五

讓EXCEL參照的工作表內,空格不顯示為0

公式是  ='Sheet01'!A1

只是當[Sheet01]A1格為空格的時候,[Sheet01]A1格會顯示為0

如何讓[Sheet01]A1格忠實呈現為空格呢?


請利用 =IF(Sheet01!A1="","",Sheet01!A1)