回复 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;
}
----------------解决方案--------------------------------------------------------