| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1397 人关注过本帖
标题:[清理垃圾帖子]
只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
收藏
已结贴  问题点数:88 回复次数:20 
[清理垃圾帖子]
若数组a中 横向或是 纵向有 >= 3 个 相同的数,则消去这些相同的数
 
样例输入:
int[][] a =
{
    { 1, 7, 3,  4,  5},  // {0, 1, 0, 0, 0}
    { 7, 7, 7,  7, 10},  // {1, 1, 1, 1, 0}
    {11, 7, 7, 14, 15},  // {0, 1, 1, 0, 0}
    {16, 7, 7, 19, 20}   // {0, 1, 1, 0, 0}
};
 
样例输出:
 
int[][] a =
{
    { -1, -1, -1,  -1,  5}, // {0, 1, 0, 0, 0}
    { 1, -1, -1,  4, 10},  // {1, 1, 1, 1, 0}
    {11, -1, -1, 14, 15},  // {0, 1, 1, 0, 0}
    {16, -1, 3, 19, 20}    // {0, 1, 1, 0, 0}
};

[ 本帖最后由 BlueGuy 于 2012-2-18 18:46 编辑 ]

[此贴子已经被作者于2015-10-23 14:46编辑过]

2012-02-18 13:55
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:44 
输出是不是敲错了,第一行的1.3.4不该被覆盖吧。
要求连续么?

重剑无锋,大巧不工
2012-02-18 14:04
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 2楼 beyondyf
这是个 俄罗斯方块 消行算法的变形。
消去一个数字,该数字上面的数字可以落下来,
+
要求连续
+
无数字用 -1 表示

[ 本帖最后由 BlueGuy 于 2012-2-18 14:11 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2012-02-18 14:09
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:44 
do
{
    标记可以消去的所有方块,如果没有则break;
    消去方块;
    落下;
}
while (1);

就按照这个格式写应该可以的
2012-02-18 14:15
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 4楼 czz5242199
我现在 快不会写代码了, 能不能直接写个代码给我

我就是真命天子,顺我者生,逆我者死!
2012-02-18 14:16
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
额、、好吧
2012-02-18 14:18
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
手机打字不方便。基本上就是按行按列扫描。晚上有时间再详谈。

重剑无锋,大巧不工
2012-02-18 14:21
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define MaxN 100

int a[MaxN][MaxN],b[MaxN][MaxN],n,m;

void init()
{
     int i,j;
     scanf("%d%d",&n,&m);
     for (i=0; i<n; i++)
      for (j=0; j<m; j++) scanf("%d",&a[i][j]);
}

int Mark()
{
    int i,j,flag=0;
    memset(b,0,sizeof(b));
    for (i=0; i<n; i++)
     for (j=0; j<m; j++)
     if (a[i][j]!=-1)
     {
                     if (a[i][j]==a[i][j+1] && a[i][j]==a[i][j+2] && j+2<m) 
                     {
                                            b[i][j]=1; b[i][j+1]=1; b[i][j+2]=1; flag=1;
                     }
                     if (a[i][j]==a[i+1][j] && a[i][j]==a[i+2][j] && i+2<n) 
                     {
                                            b[i][j]=1; b[i+1][j]=1; b[i+2][j]=1; flag=1;
                     }
     }
    return flag;
}

void doremove()
{
     int i,j;
     for (i=0; i<n; i++)
      for (j=0; j<m; j++) 
      if (b[i][j]==1) a[i][j]=-1;
}

void down()
{
     int i,j,k;
     for (j=0; j<m; j++)
     {
         k=n-1;
         for (i=n-1; i>=0; i--) 
           if (a[i][j]!=-1) a[k--][j]=a[i][j];
         for (i=k; i>=0; i--) a[i][j]=-1;
     }
}

void print()
{
     int i,j;
     for (i=0; i<n; i++)
     {
         for (j=0; j<m; j++) printf("%d ",a[i][j]);
         printf("\n");
     }
}

int main()
{
    init();
    do
    {
           if (!Mark()) break;
           doremove();
           down();
    }
    while (1);
    print();
    
    system("pause");
}
2012-02-18 14:46
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,既然小曹已经附上例子了,那我也就没必要重复了。

重剑无锋,大巧不工
2012-02-18 17:32
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 8楼 czz5242199
你的代码写的点乱,

我就是真命天子,顺我者生,逆我者死!
2012-02-18 17:50
快速回复:[清理垃圾帖子]
数据加载中...
 
   



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

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