您的位置:首页 > 理论基础

第六届CCF计算机职业资格认证考试题解(1,2两水题)

2016-04-04 19:41 609 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: