201512-1 数位之和
题目大意:输入一个数n,求出n的各个位数之和(每一位之和)
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int ans = 0;
while(n!=0){
ans += n%10;
n = n/10;
}
cout<<ans<<endl;
return 0;
}
201512-2消除类游戏
题目大意:
给定n*m大小的矩阵,每个数字代表不同的颜色,行或列出现3个或3个以上相同的数字,则这些数变为0.注意的是,一个数字可能在行或列同时被消除。
思路:
只要进行两次遍历。首先,进行行扫描,发现3个数字相同将这三个数字变为0,注意这里操作的是map_ans数组,不是原数组;发现第4个也一样的话,也将其变为0.这样行列各扫描一次,输出map_ans 即可。 这里关键是,不能直接对map原数组进行操作。
#include <iostream>
using namespace std;
#define MAX 30
int map[MAX][MAX]; //初始的map数组
int map_ans[MAX][MAX]; //经过了横处理之后的数组
int main(){
int n,m,i,j,k;
int temp;
cin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>map[i][j];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
map_ans[i][j]= map[i][j];
//一行一行处理
for(i=0;i<n;i++){
temp = 1;
for(j=1;j<m;j++){
if(map[i][j] == map[i][j-1]){
temp++;
if(temp>3)
map_ans[i][j] = 0;
}
else
temp = 1;
if(temp == 3)
map_ans[i][j] = map_ans[i][j-1] = map_ans[i][j-2] = 0;
}
}
//一列一列处理
for(i=0;i<m;i++){
temp = 1;
for(j=1;j<n;j++){
if(map[j][i] == map[j-1][i]){
temp++;
if(temp>3)
map_ans[j][i] = 0;
}
else
temp = 1;
if(temp == 3)
map_ans[j][i] = map_ans[j-1][i] = map_ans[j-2][i] = 0;
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++)
cout<<map_ans[i][j]<<" ";
cout<<endl;
}
return 0;
}