| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 212 人关注过本帖
标题:多维数组每行中对应元素是否相等
只看楼主 加入收藏
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
结帖率:95%
  已结贴   问题点数:20  回复次数:6   
多维数组每行中对应元素是否相等
如何比较二维数组A[N][M]中每一行对应的元素是否完全相等,若完全相等只保留其中一行。

举个简单例子
double PR[5][3]={
    {0.1, 0.1, 0.2},    //第1行
    {0.1, 0.2, 0.1},    //第2行
    {0.2, 0.2, 0.2},   //第3行
    {0.1, 0.1, 0.2},   //第4行
    {0.2, 0.2, 0.1}   //第5行
   };
因为只有第1行与第4行完全相同,所以只舍弃第4行,其余4行全保留。

----------------------------------------------------------------
补充说明实际情况:
用拟牛顿法解方程组,运行一次出现一组解{x1, x2,.. xm},每个元素都是小数点后很多位的浮点数;
运行100次出现100组解,这100组里有很多是相同的, 若是相同只保留一组即可,最后只输出不同的
搜索更多相关主题的帖子: 维数  对应  元素  是否  相等  
2019-07-06 19:33
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
  得分:0 
实际情况中虽然小数点后有很多位,但只要前3位相同就认为是相同

非计算机专业自学新手向大家请教
2019-07-07 11:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:197
帖 子:6566
专家分:28962
注 册:2014-5-20
  得分:2 
数组是连续存放的块,按每行一块进行块与块的比较可以吗?
2019-07-08 08:41
wufuzhang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广州
等 级:版主
威 望:8
帖 子:121
专家分:753
注 册:2017-8-9
  得分:15 
回复 楼主 qhxxbc
程序代码:
#include <stdio.h>

int main(void)
{
    float root[100][3]={ {0.1,0.1,0.1},
                        {0.1,0.1,0.2},
                        {0.1,0.1,0.3},
                        {0.1,0.1,0.1},
                        {0.1,0.1,0.4},
                        {0.1,0.1,0.5},
                        {0.1,0.1,0.6},
                        {0.1,0.1,0.6},
                        {0.1,0.1,0.8},
                        };
    
    for(int i=0;i<100;i++){
        for(int j=i+1;j<100;j++){
            if(root[i][0]==root[j][0] && root[i][1]==root[j][1] && root[i][2]==root[j][2]){
                for(int k=j+1;k<100;k++){
                    root[k-1][0]=root[k][0];
                    root[k-1][1]=root[k][1];
                    root[k-1][2]=root[k][2];
                }
            }
        }
    }
    
    for(int i=0;i<100;i++){
        if(root[i][0]!=0 && root[i][1]!=0 && root[i][2]!=0){
            for(int j=0;j<3;j++)
                 printf("root[%d][%d]=%f\t",i,j,root[i][j]);
             printf("\n");    
         }
    }
    
}

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2019-07-08 09:48
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
  得分:0 
回复 4楼 wufuzhang
非常感谢 wufuzhang 版主!
您的代码已能基本解决问题,但有一个细节还需要请教您:

在我的实际问题中,会产生 0.1234 和 0.1235 这样的数。
麻烦您花些时间改进一下程序,使得程序认为只要小数点后3位相同就是同样的数,如{0.1234, 0.1234, 0.1234} 和 {0.1235,0.1235, 0.1235}相同,就仅保留一组且为{0.123, 0.123, 0.123}。

不胜感激!

非计算机专业自学新手向大家请教
2019-07-08 11:24
wufuzhang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广州
等 级:版主
威 望:8
帖 子:121
专家分:753
注 册:2017-8-9
  得分:3 
回复 5楼 qhxxbc
在进行判断之前,先将所有数据都保留3位小数,
for(int i=0;i<100;i++){
        root[i][0]=(int)(root[i][0]*1000)/1000.0;
        root[i][1]=(int)(root[i][1]*1000)/1000.0;
        root[i][2]=(int)(root[i][2]*1000)/1000.0;
    }

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2019-07-08 12:36
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
  得分:0 
wufuzhang版主的思路清晰,举重若轻,实在佩服!!!
同时也感谢吹水佬版主的关注!


[此贴子已经被作者于2019-7-8 16:24编辑过]


非计算机专业自学新手向大家请教
2019-07-08 16:23







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048517 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved