| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2270 人关注过本帖
标题:确定一个数在一个平面中的位置
取消只看楼主 加入收藏
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
 问题点数:0 回复次数:6 
确定一个数在一个平面中的位置
题为:
形如下表:
  bgColor=#ffffff border=1>
[font=Times New Roman]
0
1
2
3
4
5
6
0
0
2
5
9
14
20

1
1
4
8
13
19


2
3
7
12
18



3
6
11
17




4
10
16





5
15






6







[/font]
数从左下往右上依次加一,一直加下去,边上的数字为坐标,竖为纵坐标,横为横坐标,如15在表中(0,5),12在(2,2)。问:给一个数,写个算法和程序得到它在表中的坐标?   
    我的想法是,用一个一维数组存下第一列的数,再你待找数去与这数组中的数比较,找出与待找数最近的两个数做差,与较小的数的差即为横坐标,与另一个数的差再减个一就是纵坐标了,但不知怎么写出源码了,因为一直相加,数太大,我定义的是长整型,但却老是溢出,不知怎么处理了。
    求一个高效的算法和源码,并帮解决数据溢出的问题。
搜索更多相关主题的帖子: 平面 位置 
2008-03-04 13:18
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
得分:0 
谢谢楼上诸位大侠
刚回来看回贴,又想了两个小时,又想了点,程序还没写好,还在调试中,好了发出来。
    看了上面大侠的回贴,让我又学不少,能不能又给个不同的思路让我又多学点。
    还有怎么处理数据溢出问题,不方便的话,给个链接也行

心中明了路向何方,前路自有一番风光。
     skroty@.cn
2008-03-04 16:24
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
得分:0 
还是按我自己的算法做的:
#include<stdio.h>
#define NUM 2000000000
main()
{    
    long a[42000];/*设个足够大的数组用来存(0,i)*/
    do
     {   
    long x=0,y=0,n,i=0;/*要在这定义变量,在上面定义的话就要在while(n>=a[i]&&a[i]<=NUM);后再定义一次,是因为要从0开始再次比对*/
    printf("请输入一个数\n");
    scanf("%ld",&n);
    do
     {
            i++;
       a[i]=i*(i+1)/2;
       if(n==0)
       printf("0在表中(0,0)");/*不知道怎么在计算中处理0,只好把它单列出来了*/
       if(n<a[i]&&n>0)/*一定要加n>0,不然会出BUG,输出“0在表中(随机数,随机数)”
          {
        x=n-a[i-1];
        y=i-x-1;
        printf("%ld在表中(%ld,%ld)\n",n,x,y);
           }
          /*if(n==a[i])
              printf("%ld在表中(0,%ld)\n",i);*//*去掉这的注释符,如输出(0,i)上的数就会出现两次输出的情形,这是我出的第一个BUG,改好后就出现0的问题*/
      }while(n>=a[i]&&a[i]<=NUM);        
      printf("\n");
       }while(getchar()!='\'');
}

心中明了路向何方,前路自有一番风光。
     skroty@.cn
2008-03-04 18:05
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
得分:0 
说了有两次输出的事,这里出现了,n被替换了的情况,能说说吗

心中明了路向何方,前路自有一番风光。
     skroty@.cn
2008-03-04 18:07
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
得分:0 
呵呵,再次感谢诸位大侠,让我学到了不少。

心中明了路向何方,前路自有一番风光。
     skroty@.cn
2008-03-05 00:26
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
得分:0 
同意楼上观点,我也为我自己的算法的效率低而烦恼,也想弄个更好点的,
但现在才却觉得自己数学学的好烂,鄙视自己一秒钟~~~~~
看了楼上和lonmaor(8#)的就更有此感
呵呵,我会加油学的,把不足的地方全力补好,

心中明了路向何方,前路自有一番风光。
     skroty@.cn
2008-03-05 11:14
skrot
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2008-2-16
收藏
得分:0 
帮同学发个,这是他的代码,算法和无邪的很近
#include <stdio.h>
#include <math.h>
main()
{
    unsigned long x,n,a,b;
loop:
    printf("请输入要查的数据:\n   输入0退出:\n");
    scanf("%ld",&x);
    if (x==0)
        exit();
    n=(int)(1+sqrt(1+8*x))/2;
    printf("          %lu在第%d行\n",x,n); /*第几行*/
    a=(n*(n-1))/2;
    b=x-a;
    printf("                %d在坐标纸中的位置是(%lu,%lu)\n\n",x,n-b-1,b);
    goto loop;
}

心中明了路向何方,前路自有一番风光。
     skroty@.cn
2008-03-09 08:58
  • 7
  • 1/1页
  • 1
快速回复:确定一个数在一个平面中的位置
数据加载中...
 
   



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

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