当前位置: 代码迷 >> C语言 >> 确定一个数在一个平面中的位置
  详细解决方案

确定一个数在一个平面中的位置

热度:169   发布时间:2008-03-05 09:08:19.0
回复 9# 的帖子
简单是简单,想的也简单!不过这效率也低的可怜!问你个问题:如要要你找1000的坐标,你会从0开始找吗?你都不会,为什么要计算机这样做!
----------------解决方案--------------------------------------------------------
同意楼上观点,我也为我自己的算法的效率低而烦恼,也想弄个更好点的,
但现在才却觉得自己数学学的好烂,鄙视自己一秒钟~~~~~
看了楼上和lonmaor(8#)的就更有此感
呵呵,我会加油学的,把不足的地方全力补好,
----------------解决方案--------------------------------------------------------
和"飞燕之家在线测评论坛"上的类似,不过她的难些.


来源:(飞燕之家在线测评论坛OnlineJudge|编程学习论坛)http://yzfy.org/bbs/viewthread.php?tid=475&extra=page%3D1

题目描述:
把自然数按如下方式排列:
1 3 6 10 ....
2 5 9
4 8
7 ....
这样每一个自然数都和一个整点坐标一一对应,
如9的坐标就是(3,2)

输入:
多组测试数据,每组一行,输入坐标或者一个自然数,
你应该假设所有输入和输出的数均在32bit有符号整数的范围内
且同时只会输入正整数
以EOF标志结束程序

输出:
当输入的是坐标的时候,输出对应的自然数,
当输入的是自然数的时候,输出对应的坐标。

样例输入:
3 2
9

样例输出:
9
3 2

难度:for beginner
来源:(飞燕之家在线测评论坛OnlineJudge|编程学习论坛)http://yzfy.org/bbs/viewthread.php?tid=475&extra=page%3D1

昨天做了2个多小时...
----------------解决方案--------------------------------------------------------
回复 13# 的帖子
多点步骤而已!按我的方法,前面已经列出!
如果已知坐标求数字(a,b)求数字也能直接写出来。看看(1,a+b-1)和(a,b)有什么关系!(1,a+b-1)是能直接求出的!
----------------解决方案--------------------------------------------------------
帮同学发个,这是他的代码,算法和无邪的很近
#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;
}
----------------解决方案--------------------------------------------------------
  相关解决方案