尊宝国际娱乐APP下载

设为首页收藏本站

编程十万个为什么,属于程序员的编程论坛

 找回密码
 5秒快速注册
QQ登录 只需一步,快速开始
搜索
楼主: 虫虫
打印 上一主题 下一主题

[C/C++每日一练] 程序面试题2

[复制链接]
11
发表于 2014-1-16 15:25:57 | 只看该作者
如何做出此类螺旋矩阵
12
发表于 2014-1-20 11:58:41 | 只看该作者
回复看看
回复 使用道具 举报
13
发表于 2014-1-21 10:27:12 | 只看该作者
回复一字
回复 使用道具 举报
14
发表于 2014-1-21 20:33:04 掌上BcWhyBcWhy手机版 | 只看该作者
大菜鸟驾到~来自: iPhone客户端
15
发表于 2014-1-28 15:33:38 | 只看该作者
xxxxxxxxxxxxxxxxxxxx
16
发表于 2014-2-5 11:33:44 掌上BcWhyBcWhy手机版 | 只看该作者
不知道,看看来自: iPhone客户端
17
发表于 2014-2-9 16:25:38 | 只看该作者
...................................................
回复 使用道具 举报
18
发表于 2014-2-15 19:21:16 | 只看该作者
什么是螺旋矩阵

void fun1()
{
        cout<<"Please Input :"<<endl;
        int n;
        cin>>n;
       
        int level, temp_i, temp_j, num; //level 表示当前数在哪一层,核心层为第一层,表示为0。
                                                                        //num 表示当前数在本层中按顺序的位置
        int max_level = (n + 1) / 2;

        bool up_right = true;

        for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                {
                        temp_i = i - max_level;
                        temp_j = j - max_level;
                        level = abs(temp_i) > abs(temp_j) ? abs(temp_i) : abs(temp_j);

                        if(abs(temp_i) >= abs(temp_j))
                        {
                                if(temp_i <= 0)
                                        up_right = true;
                                else
                                        up_right = false;
                        }else
                        {
                                if(temp_j >= 0)
                                        up_right = true;
                                else
                                        up_right = false;                               
                        }
                       
                        if(up_right)
                        {
                                num = (temp_i + level ) + (temp_j + level) + 1;
                        }else
                        {
                                num = 6 * level - temp_i - temp_j + 1;
                        }

                        int sum = 0;
                       
                        for(int k = 0; k < max_level - level - 1; ++k)
                                sum += 8 * (max_level - k - 1);
                       
                        cout<< sum + num <<"        ";

                        if(j % n == 0)
                                cout<<endl;
                }
}
19
发表于 2014-2-15 20:10:30 | 只看该作者
void fun1()
{
        cout<<"Please Input :"<<endl;
        int n;
        cin>>n;
       
        int level, temp_i, temp_j, num; //level 表示当前数在哪一层,核心层为第一层,表示为0。
                                                                        //num 表示当前数在本层中按顺序的位置
        int max_level = (n + 1) / 2;

        bool up_right = true;

        for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                {
                        temp_i = i - max_level;
                        temp_j = j - max_level;
                        level = abs(temp_i) > abs(temp_j) ? abs(temp_i) : abs(temp_j);

                        if(n % 2 == 0 && (temp_i + temp_j) <= 0)
                                ++level;
                               
                        if(abs(temp_i) >= abs(temp_j))
                        {
                                if(temp_i <= 0)
                                        up_right = true;
                                else
                                        up_right = false;
                        }else
                        {
                                if(temp_j >= 0)
                                        up_right = true;
                                else
                                        up_right = false;                               
                        }
                       
                        if(up_right)
                        {
                                if(n % 2 == 0)
                                        num = (temp_i + level - 1) + (temp_j + level - 1) + 1;
                                else
                                        num = (temp_i + level ) + (temp_j + level) + 1;
                        }else
                        {                               
                                if(n % 2 == 0)
                                        num = 8 * level - 4 - (temp_i + level - 1) - (temp_j + level - 1) + 1;
                                else
                                        num = 6 * level - temp_i - temp_j + 1;
                        }

                        int sum = 0;
                       
                        if(n % 2 == 0)
                                for(int k = 0; k < max_level - level ; ++k)
                                        sum += 8 * (max_level - k) - 4;
                        else
                                for(int k = 0; k < max_level - level - 1; ++k)
                                        sum += 8 * (max_level - k - 1);                       
                       
                        cout<< sum + num <<"        ";

                        if(j % n == 0)
                                cout<<endl;
                }
}

刚刚那个没判断偶数的情况,现在这个添加上去了,不过代码写的太烂。这是不是传说中的n年后自己都看不懂的代码。
做这道题的思想是:
在奇数情况下
因为有个中心,机 n*n的数就是中心点。那么所有的数据都是围着他来绕圈的,可将这些围成的圈子排个序号,再将圈子中的每个数按从小到大的顺序排个序号,即可根据i,j来得出它所在的圈子序号,和他所在圈子中的序号,相加即可得出数值。
在偶数情况下
因为没有中心点。那么当我们写出 当n=4的情况时,可看出其是有规律的。可以 画个坐标轴来找出其几何规律。就容易给每个数值分出圈子序号了。
其它情况和奇数情况就一样了。

这个讲的不详细。。如果有想交流的,回复即可。
20
发表于 2014-2-21 23:33:45 | 只看该作者
666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 5秒快速注册
本版积分规则
关闭

BcWhy推荐上一条 /1 下一条

QQ|关于我们|最新帖子|小黑屋|手机版|编程十万个为什么 ( 粤ICP备16108587号-2   GMT+8, 2017-8-17 17:40 , Processed in 0.157922 second(s), 31 queries , File On.
Powered by Discuz! X3.3 © 2001-2017 Comsenz Inc.
快速回复 返回顶部 返回列表
尊宝国际娱乐APP下载亚虎娱乐手机官方网站亚虎国际娱乐齐乐娱乐国际
优乐娱乐齐乐娱乐网优乐娱乐龙8娱乐手机下载
优乐娱乐亚虎娱乐手机官方网站亚虎国际娱乐梦之城娱乐
尊宝国际娱乐APP下载尊宝国际手机首页尊宝国际娱乐城齐乐娱乐国际
优乐娱乐齐乐娱乐网优乐娱乐龙8娱乐手机下载