C Programming OJ DAY3

/*
消除类游戏 
*/
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值