2020级DSP第二次作业

本文涵盖了DSP作业的五个部分:1.通过二维数组判断棋局获胜者及坐标;2.实现字符串在文件中的大小写不敏感替换;3.基于特定密钥的加密算法设计;4.通讯录整理的概述;5.小型图书管理系统的简介。详细阐述了每个任务的思路和要求。
摘要由CSDN通过智能技术生成

1.判断

读入某一时刻下棋的状态,并判断是否有人即将获胜,即:同一颜色的棋子在同一条横行、纵列或斜线上连成4个棋子,且该4个棋子的两端至少有一端为空位置。

要求:有人获胜时输出获胜的一方以及最前面的棋子的横纵坐标(横行小的优先输出),无人获胜时输出“No”。

思路:建立二维数组保存下棋时的状态,遍历数组,如果读到的字符不为‘0’.则同时判断:
A.四个方向(横、纵、左斜、右斜)是否有连续四个相同的字符
B.两端是否至少有一个位置为‘0’,即至少有一段空出来

#include <stdio.h>
#include <stdlib.h>
#define N 50
int qp[N][N];							 
int line(int a[][N],int i,int j)
{
   
	int x=1;
	for(x=1;x<4;x++)						//判断横行是否有连续的四个相同棋子 
	{
   
		if(a[i][j]!=a[i][j+x])
		{
   
			return 0;
		}
	}
	if(a[i][j-1]!=0&&a[i][j+4]!=0)		//判断左右两端是否有不同棋子 
	{
   
		return 0;
	}
	return 1;
}
int row(int a[][N],int i,int j)         // 判断纵行是否有连续的四个相同棋子 
{
   
	int y=1;
	for(y=1;y<4;y++)
	{
   
		if(a[i][j]!=a[i+y][j])
		{
   
			return 0;
		}
	}
	if(a[i-1][j]!=0&&a[i+4][j]!=0)		//判断上下两端是否有不同的棋子 
	{
   
		return 0;
	}
	return 1;
}
int left_up(int a[][N],int i,int j)				  //判断左上方向是否有连续相同的四个棋子 
{
   
	int x=1,y=1;
	for(x=1;x<4;x++,y++)						
	{
   
		if(a[i][j]!=a[i+x][j+y])
		{
   
			return 0;
		}
	}
	if(a[i-1][j-1]!=0&&a[i+4][j+4]!=0)  //判断斜方向两端是否有不同的棋子 
	{
   
		return 0;
	}
	return 1;
}
int right_up(int a[][N],int i,int j)				  //判断右上方向是否有连续相同的四个棋子 
{
   
	int x=1,y=1;
	for(x=1;x<4;x++,y++)						
	{
   
		if(a[i][j]!=a[i+x][j-y])
		{
   
			return 0;
		}
	}
	if(a[i-1][j+1]!=0&&a[i+4][j-4]!=0)  //判断斜方向两端是否有不同的棋子 
	{
   
		return 0;
	}
	return 1;
}
int main()
{
   
	int i=0,j=0;
	for(i=0;i<19;i++)
	{
   
		for(j=0;j<19;j++)
		{
   
			scanf("%d",&qp[i][j]);		//输入棋盘 
		}
	}
	int flag=0;						 //设置标记判断胜负
	for(i=0;i<19;i++)
	{
   
		if(flag!=0)
		{
   
			break;
		}
		for(j=0;j<19;j++)
		{
   
			if
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值