• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            麒麟子

            ~~

            導(dǎo)航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計(jì)

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            [導(dǎo)入]網(wǎng)易程序筆試題

            題目如下:

            21     22    23    24    25    26

            20     7      8      9      10    27

            19     6      1      2      11    28

            18     5      4      3      12    29

            17    16     15    14    13    30

                如圖:設(shè)“1”的坐標(biāo)為(0,0) “7”的坐標(biāo)為(-1,-1) 編寫一個(gè)小程序,使程序做到輸入坐標(biāo)(X,Y)之后顯示出相應(yīng)的數(shù)字。我的程序,沒有怎么調(diào)整,很粗糙,不過,實(shí)現(xiàn)就行了:#include <iostream>

            using namespace std;

            /* 

            設(shè)“1”的坐標(biāo)為(0,0) “7”的坐標(biāo)為(-1,-1) 編寫一個(gè)小程序,

            使程序做到輸入坐標(biāo)(X,Y)之后顯示出相應(yīng)的數(shù)字。

            */

            /************************************************************************

            **算法:數(shù)字是圍繞1“盤旋”, 移動(dòng)的步進(jìn)值是1,1,2,2,3,3,4,4,5,5,6,6……

            **對(duì)于一個(gè)數(shù),我們可以算出他移動(dòng)的步數(shù),然后和一個(gè)沒有走完的偏移,如果恰好走完就是

            **偏移為0。

            **然后我們對(duì)于輸入的值,我們模擬走過的路徑來求值,步數(shù)表示已經(jīng)走過而偏移表示要繼續(xù)

            **走偏移數(shù)目的步數(shù)

            *************************************************************************/

            enum X {RIGHT = 1, DOWM = 1,LEFT = -1, UP = -1};

            /*

            *get_attribution()函數(shù)取得輸入值移動(dòng)過幾次用times表示,

            *以及比每次移動(dòng)的終點(diǎn)要多走的步數(shù),用dif表示

            */

            void get_attribution(int in_number, int &dif, int ×) {

                int i = 0;

                 in_number--;

                while (in_number >= 0) {

                     in_number = in_number - (i/2+1);

                     times = i;

                     i++;

                    if (in_number >= 0) {

                         dif = in_number;

                     }

                 }

            }

            int main()

            {

                int a = 21; //輸入一個(gè)數(shù)值,這里就不人機(jī)交互輸入了

                int dif = 0, times = 0; // 起始偏移距離和次數(shù)

                 get_attribution(a, dif, times);

                 cout << "偏移" << dif << "中間走了" << times << "次" << endl;

                int x = 0, y = 0; //起始端點(diǎn)

                for (int i = 1; i <= times; i++) {

                    switch (i%4) { //已經(jīng)走過了一些步數(shù)

                        case 0: //上移到下一個(gè)端點(diǎn)

                             y += UP *((i-1)/2+1);                   break;

                        case 1: //右移到下一個(gè)端點(diǎn)

                             x += RIGHT * ((i-1)/2+1);               break;

                        case 2: //下移到下一個(gè)端點(diǎn)

                             y += DOWM * ((i-1)/2+1);                break;

                        case 3: //左移到下一個(gè)端點(diǎn)

                             x += LEFT * ((i-1)/2+1);                break;

                     }

                 }

                switch (times%4) { //繼續(xù)完成要偏移的值

                    case 3: //接下來的操作是上移,x不變,y減小

                         y += UP * dif;              break;

                    case 0: //接下來的操作是右移

                         x += RIGHT * dif;           break;

                    case 1: //接下來的操作是下移

                         y += DOWM * dif;            break;

                    case 2: //接下來的操作是左移

                         x += LEFT * dif;            break;

                 }

                 cout << "("   <<   x << ", " << y << ")" << endl;

                return 0;

            }

            作者給出了自己的程序,太長(zhǎng)我就引用了,也給出了人家的程序 ,挺不錯(cuò),如下:#include <iostream>

            #include <conio.h>

            #include <math.h>

            using namespace std;

            int newVal(int x, int y)

            {

                //以結(jié)點(diǎn)1為原點(diǎn)

                //以相鄰兩結(jié)點(diǎn)間的距離為單位(如結(jié)點(diǎn)2與結(jié)點(diǎn)3的之間線段)

                //結(jié)點(diǎn)7所在的正方形(由結(jié)點(diǎn)2、3、4、5、6、7、8、9構(gòu)成)的邊長(zhǎng)

                //的一半為1,即結(jié)點(diǎn)7到原點(diǎn)1的最大投影距離為1。

                //于是由結(jié)點(diǎn)坐標(biāo),可以求出此結(jié)點(diǎn)所在的正方形的投影距離:

                int r = max(abs(x),abs(y));    

                

                //進(jìn)行坐標(biāo)變換,即把坐標(biāo)原點(diǎn)移動(dòng)到正方形的一個(gè)角結(jié)點(diǎn)上,

                //使整個(gè)正方形落在第一象限,例如,當(dāng)r=1時(shí),將把坐標(biāo)原點(diǎn)從結(jié)點(diǎn)1

                //移動(dòng)到結(jié)點(diǎn)7。

                 x += r;

                 y += r;

                //正方形的邊長(zhǎng),等于投影距離的兩倍

                int d = 2*r;

                int s;    //s為結(jié)點(diǎn)在自己的正方形的偏移量

                if (y == 0)

                     s = 3*d + x;

                else if (x == 0)

                     s = 2*d + (d-y);

                else if (y == d)

                     s = d + (d-x);

                else

                     s = y;

                //pow((r+1),2)為內(nèi)層的結(jié)點(diǎn)數(shù)。

                //例如,結(jié)點(diǎn)10的內(nèi)層由結(jié)點(diǎn)1和正方形A(2、3、4、5、7、8、10)構(gòu)成

                //這些內(nèi)層的總結(jié)點(diǎn)數(shù)恰為:(正方形A的邊長(zhǎng)+1)的平方,

                //因?yàn)椋赫叫蜛的邊長(zhǎng) =(結(jié)點(diǎn)10所在正方形的半徑-1)*2

                //故:內(nèi)層結(jié)點(diǎn)數(shù) = (結(jié)點(diǎn)10所在正方形的邊長(zhǎng)-1)的平方

               //結(jié)點(diǎn)值 = 在當(dāng)前正方形的偏移量 + 內(nèi)層的結(jié)點(diǎn)數(shù)

                 s += pow((d-1),2);

                return s;

            }

            int main(int argc,char * argv[])

            {

                int x, y;

                 cout <<"請(qǐng)輸入坐標(biāo)(x y):";

                while (cin>>x>>y)

                 {

                 cout <<"坐標(biāo)所在的結(jié)點(diǎn)值為:"<<f(x, y)<<endl;

                 cout <<"請(qǐng)輸入坐標(biāo)(x y):";

                 }

                return 0;

            }

             

            ----------------------------------------------------------------------------------------------------------------------------------

            這是我寫的,算法請(qǐng)看二樓

            #include<stdio.h>

            int GetX(int x)//求(X,0)
               {
                int result=1,i=0;
                if (x==0) return result;
                else if (x>0)
                {
                    for(i=0;i<x;i++)
                    {
                        result = result + 1+8*i;//通項(xiàng)公試. a(n) = a(n-1) + a(0) + d*(n-1)
                    }
                    return result;
                 }
                 else if(x<0)
                 {
                    for(i=0;i<-x;i++)
                    {
                        result = result + 5+8*i;
                    }
                    return result;
                 }
            }
            int GetY(int y)//求(0,Y)
            {
                int result=1,i=0;
                if (y==0) return result;
                else if (y>0)
                {
                    for(i=0;i<y;i++)
                    {
                        result = result + 7+8*i;
                    }
                    return result;
                 }
                 else if(y<0)
                 {
                    for(i=0;i<-y;i++)
                    {
                        result = result + 3+8*i;
                    }
                    return result;
                 }
            }
            int GetNum(int x,int y)//求(X,Y)對(duì)應(yīng)的值
            {
                if(abs(x)<=abs(y))
                {
                    if(y<=0)
                    return GetY(y)+x;
                    else return GetY(y)-x;
                 }
                else
                {
                    if(x<=0)
                    return GetX(x)-y;
                    else return GetX(x)+y;
                }

            }
                   
            void main()
            {
                int x,y;
                while(1)
                {
                printf("please input (X,Y)\n");
                scanf("%d,%d",&x,&y);
                printf("The result is:%d\n",GetNum(x,y));
                }
                getch();

            }


            文章來源:http://ly-weiwei.blog.163.com/blog/static/72975283200811281154738

            posted on 2008-12-28 01:15 麒麟子 閱讀(144) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            无码国内精品久久人妻蜜桃| 国产精品久久自在自线观看| 久久精品国产乱子伦| 国产精品久久久久久久久免费| 欧洲精品久久久av无码电影| 久久精品无码av| 亚洲日本久久久午夜精品| 亚洲国产成人久久综合碰碰动漫3d| 日韩电影久久久被窝网| 91精品国产综合久久四虎久久无码一级 | 精品一区二区久久| 日批日出水久久亚洲精品tv| 无码国内精品久久人妻| 国产成人无码精品久久久性色| 亚洲精品乱码久久久久久蜜桃| 国产精品内射久久久久欢欢| 亚洲精品蜜桃久久久久久| 国产亚洲美女精品久久久| 国产精品国色综合久久| 77777亚洲午夜久久多喷| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产精品99久久久久久宅男| 日韩av无码久久精品免费| 波多野结衣久久精品| 久久久受www免费人成| 欧美伊香蕉久久综合类网站| 无码人妻精品一区二区三区久久久 | 久久亚洲精精品中文字幕| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲精品无码久久一线| 亚洲国产另类久久久精品黑人| 久久久久久久精品妇女99| 久久精品无码免费不卡| 香蕉久久夜色精品国产小说| 久久99精品国产麻豆| 久久99亚洲网美利坚合众国| 日韩精品国产自在久久现线拍| 精品久久综合1区2区3区激情| 久久久WWW成人| 久久久久久久亚洲精品| 精品无码久久久久久国产|