| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 388 人关注过本帖
标题:大家帮忙来看看
只看楼主 加入收藏
a344304180
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-1-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
大家帮忙来看看
fans喜欢玩折纸游戏。整张纸被分成m*m个格子,即构成一个方阵,每个格子里面都写了一个正整数。游戏分两步:首先左右对折,如果对应的格子的数字都相同,那么进行下一步操作;否则停止游戏,此时游戏的结果是"no"。然后上下对折,如果对应的格子的数字相同,那么游戏的结果是“yes”;否则停止游戏,游戏的的结果是"no"。
Input:
第一个数为方阵的个数n,接着就是每个方阵的数据,每个方阵的第一行为该方阵的阶m,后跟m*m个元素。
Output:
如果对应的格子的数字相同,那么游戏的结果是“yes”;否则停止游戏,游戏的的结果是“no”。
Sample Input:
2
3
1 2 1
3 5 3
1 2 1
4
2 1 1 2
1 2 3 4
4 3 2 1
2 1 1 2
Sample Output:
yes
no

本人菜鸟写的程序:
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=1; i<=n; ++i)
    {
        int m;
        cin>>m;
        int **a=new int*[m];
        for(int j=0; j<m; j++)
        {
            a[j]=new int[m];
            for(int p=0; p<m; p++)
                cin>>a[j][p];
        }
        int y=0,t=0;
        if(m%2==0)
            y=1;
        for(int x=0; x<=m/2-y; x++)
        {
            for(int q=0; q<=m/2-y; q++)
            {
                if(a[x][q]!=a[x][m-1-q]||a[x][m-1-q]!=a[m-1-x][q]||a[m-1-x][q]!=a[m-1-x][m-1-q])
                {
                    cout<<"no"<<"\n";
                    t=1;
                    break;
                }
            }
            if(t==1)
                break;
        }
        if(t==0)
            cout<<"yes"<<"\n";
    }
    return 0;
}

个人感觉比较繁琐,不知道哪些地方可以优化,尤其循环判断的那一环节。。。

搜索更多相关主题的帖子: 游戏 下一步 正整数 元素 
2013-01-03 12:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53942
注 册:2011-1-18
收藏
得分:10 
算法没问题,只是代码不好看
程序代码:
#include <iostream>
using namespace std;

int main()
{
    size_t n;
    cin >> n;
    for( size_t i=0; i<n; ++i )
    {
        size_t m;
        cin >> m;
        int* a = new int[m*m];
        for( size_t j=0; j<m*m; ++j )
            cin >> a[j];

        bool f = true;
        for( size_t x=0; f && x<m/2; ++x )
        {
            for( size_t y=0; f && y<m/2; ++y )
            {
                if( a[x*m+y]!=a[x*m+(m-1-y)] || a[x*m+y]!=a[(m-1-x)*m+y] || a[x*m+y]!=a[(m-1-x)*m+(m-1-y)] )
                    f = false;
            }
        }

        delete[] a;

        cout << (f?"yes":"no") << endl;
    }

    return 0;
}

2013-01-04 09:00
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:10 
来学习一下

我们的目标只有一个:消灭0回复!
while(1)
++money;
2013-01-04 11:18
快速回复:大家帮忙来看看
数据加载中...
 
   



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

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