/*
消除类游戏
*/
#include <stdio.h>
#include<stdlib.h>
int main(){
int m,n;
scanf("%d %d",&m,&n);
int a[100][30],b[100][30];
/*
设置所需参数
本题使用二维数组,类似矩阵,m和n分别表示棋盘的行数和列数
*/
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
b[i][j]=a[i][j];
}
}
/*
键盘输入所处理的矩阵
其实有两个矩阵,一个用来比较,另一个用来处理
*/
for(int i=0;i<m;i++){
for(int c=0;c<n-2;c++){
int j=c+1,k=c+2;
if(a[i][c]==a[i][j] and a[i][j]==a[i][k]){
b[i][c]=0;
b[i][j]=0;
b[i][k]=0;
}
}
}
/*
嵌套循环
先从行开始遍历
判断相邻的三项是否相同
依次遍历所有的相邻三项
并对b矩阵作出处理
*/
for(int i=0;i<n;i++){
for(int c=0;c<m-2;c++){
int j=c+1,k=c+2;
if(a[c][i]==a[j][i] and a[j][i]==a[k][i]){
b[c][i]=0;
b[j][i]=0;
b[k][i]=0;
}
}
}
/*
原理同上
*/
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
/*
将处理后的矩阵b循环输出
*/
}
/*
数字排序
*/
#include <stdio.h>
#include<stdlib.h>
int sum(int x){
int summ=0;
for(int i=0;x!=0;i++)
{
summ=summ + x%10;
x=x/10;
}
return summ;
}
/*
模块化设计思想
sum函数引入参数
计算x各个位数的和
*/
int main(){
int n,a[1000],b[1000];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
b[i]=sum(a[i]); //调用定义好的sum函数实现各项相加
}
/*
输入n代表有几个数
for循环输入所有的数
调用sum函数计算所有位的和
存放在b矩阵中
*/
int temp;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++) {
if(b[j]>b[i]){
temp=b[j];
b[j]=b[i];
b[i]=temp;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
if(b[j]==b[i]){
if(a[j]<a[i]){
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
}
/*
最核心的代码
for嵌套循环
依次比较b矩阵前一个元素和后一个元素
把大的sum放在前面(交换b[i],b[j]
if sum相同
交换a[j]和a[i]
temp类似交换数值的寄存器
*/
for(int i=0;i<n;i++){
printf("%d %d\n",a[i],b[i]);
}
/*
依次输出a,b矩阵
*/
return 0;
}