判断二维数组中的重复元素
aaaaabb bcc
bd df e
bggfe
以上述数组为例,除了b以为,其他的重复字母都是排列在相同的行或者相同的列上的。我想要写出一个函数,其目的是判断相同的字母是不是都排列在同一行或列
首先循环字母表,判断是哪个字母,然后判断重复的字母是否在同一行或者列上,如果全部存在的字母都是符合要求的,则返回true,否则返回false。
字母表的循环我是直接首先定义char c=‘a';之后对c++;实现的,二维数组的遍历肯定是两个for循环,但是for循环和字母遍历的关系搞得我很迷糊 bool shape(char baloon,int row,int col){
int i,j;
int horizontal=0,vertical=0;
char c='A';
for(i=1;i<row-1;i++){
for(j=1;j<col-1;j++){
if((baloon==baloon)&&(baloon==c)){
horizontal++;
}
else if((baloon==baloon)&&(baloon==c)){
vertical++;
}
}
}
if(horizontal*vertical!=0){
return false;
}
else{
return true;
}
}
我是这样写的,但是没有想好怎么让字母表循环起来{:10_266:}{:10_266:} RyanChak 发表于 2022-11-14 21:47
我是这样写的,但是没有想好怎么让字母表循环起来
所有的相同的字母都要在同一行或者同一列上,不太清楚是什么情况,请你举出一个同样是 4 x 5 的二维字符数组可以判断为 ture 的例子到底要怎样才能满足要求。 a a a b b
c d d d e
c fffe
c g g ge
比如这个,从a到e所有重复的字母都是组成一条直线,无论是横着还是竖着, 所以是true
最开始举的例子中b就拐弯了,所以不符合要求 jackz007 发表于 2022-11-14 22:27
所有的相同的字母都要在同一行或者同一列上,不太清楚是什么情况,请你举出一个同样是 4 x 5 的二 ...
a a a b b
c d d d e
c fffe
c g g ge
比如这个,从a到e所有重复的字母都是组成一条直线,无论是横着还是竖着, 所以是true
最开始举的例子中b就拐弯了,所以不符合要求 本帖最后由 jhq999 于 2022-11-14 23:46 编辑
#include<stdio.h>
struct havechar
{
char e;
int isxy,x,y;
};
int main()
{
char ch=
{
'a', 'a', 'a', 'a', 'a',
'b ', 'b', 'b', 'c','c',
'b', 'd','d', 'f', 'e',
'b ', 'g ','g', 'f', 'e'
};
char (*p)=(char(*))ch;
struct havechar hch= {0};
int n=0;
for(int i=0; i<4; i+=1)
{
for(int j=0; j<5; j+=1)
{
int k=0;
for(; k<n; k+=1)
{
if(p==hch.e)
{
if((1==hch.isxy&&i+1!=hch.x)||(2==hch.isxy&&j+1!=hch.y))//前俩相同元素确定是同行isxy=1,同列isxy=2,
{
hch.isxy=-1;//不在同一行或同一列isxy=-1
}
else if(0==hch.isxy)//isxy=0时是已经有这个元素了,第二次遇到这个元素
{
if(i+1==hch.x)hch.isxy=1;//如果同一行
else if(j+1==hch.y)hch.isxy=2;//同一列
else hch.isxy=-1;//不同行也不同列
}
break;
}
}
if(k==n)hch.e=p,hch.isxy=0,hch.x=i+1,hch.y=j+1,n+=1;//没有这个元素,添加
}
}
for(int i=0;i<n;i+=1)if(hch.isxy>=0)printf("%c ",hch.e);
return 0;
}
a c d f e g
Process returned 0 (0x0) execution time : 0.290 s
Press any key to continue.
本帖最后由 jackz007 于 2022-11-15 00:25 编辑
#include <stdio.h>
int check(char s[] , int n , int m)
{
int c , d , i , j , k , r ;
char (* p) = (char(*)) s ;
for(i = 0 ; i < 128 ; i ++) d = 0 ;
for(i = 0 ; i < m * n ; i ++) d] ++ ;
for(i = 0 , r = 1 ; i < n && r ; i ++) {
for(k = 0 ; k < m && r ; k = j) {
for(c = 1 , j = k + 1 ; j < m && p == p && r ; c ++ , j ++) ;
if(c > 1 && c != d]) {
r = 0 ;
break ;
}
}
}
for(i = 0 ; i < m && r ; i ++) {
for(k = 0 ; k < n && r ; k = j) {
for(c = 1 , j = k + 1 ; j < n && p == p && r ; c ++ , j ++) ;
if(c > 1 && c != d]) {
r = 0 ;
break ;
}
}
}
return r ;
}
int main(void)
{
char s ;
int i , j , k , m , n ;
for(n = 4 , i = 0 ; i < n ; i ++) {
for(m = 5 , j = 0 ; j < m ; j ++) {
do {
scanf("%c" , & s) ;
} while(s == ' ' || s == '\t' || s == '\n') ;
}
}
if(check(s , n , m)) printf("true\n") ;
else printf("false\n") ;
}
编译运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
a a a b b
c d d d e
c fffe
c g g ge
true
D:\\C>x
aaaaa
bb bcc
bd df e
bggfe
false
D:\\C> 感谢大佬们的解答
页:
[1]