当前位置: 代码迷 >> C语言 >> [讨论]第五期题目,大家做做.
  详细解决方案

[讨论]第五期题目,大家做做.

热度:209   发布时间:2006-12-11 17:49:05.0
第1题有个初步想法.
首先判断输入数的长度(晕,不知道哪个函数).
1位数总长度有9
2位数总长度有180
3位数总长度有2700
.......
得到长度X.
如果189<X<2889(说明这个数的长度为3).用(X-189)/3得的数为这个数.余数为这个数字的数位.分别为210(就是余2为百位上的数……)。

函数有伐?提供个。见识少了点。呵呵~

晕。错了错了喃。把题目的数字的排列弄错了。郁闷!

[此贴子已经被作者于2006-12-11 19:48:49编辑过]


----------------解决方案--------------------------------------------------------

取对数应该可以吧!log10()


----------------解决方案--------------------------------------------------------

可以么?我都快忘了怎么取了喃。我记得有求长度的嘛。你也不知道嘛?


----------------解决方案--------------------------------------------------------

将一个数取对数之后加1就是这个数的长度吧!100的对数是2那么它的长度就是3。


----------------解决方案--------------------------------------------------------
汗了。弄错了。T。T再来看看。。。刚刚写成12345678901011之类的了。汗。

[此贴子已经被作者于2006-12-11 19:58:15编辑过]



----------------解决方案--------------------------------------------------------
我想问一下,版主你的题都是在那里找的?
----------------解决方案--------------------------------------------------------
浙江大学ACM里的.

第一个我还没做出来,想看看大家有什么高招.郁闷着...
大家帮忙啊
----------------解决方案--------------------------------------------------------
饿,晕这么复杂。昨天头痛。。。身体不佳。

今天上课的时候又想了想。貌似可以这样。

这里先写个算只有个位数的办法。

main()
{
long x;
int i;
scanf("%d",x);

if(x<=45)
for(i=1;;i++)
if(i*(i+1)/2>=x) break;

x=x-i*(i-1)/2;

printf("%d",x);
}
这个还没测试过。没编译器。
这里只是个位的数。也就是X不能大于45~。

2位数的也有考虑到。貌似也行。就是还有点问题。回去再想想。

[此贴子已经被作者于2006-12-12 21:31:36编辑过]


----------------解决方案--------------------------------------------------------
第一题的题意还是不怎么懂
英语水平有限.....
能介绍清楚点吗?
----------------解决方案--------------------------------------------------------
饿,不好意思。输入总是没考虑。

2位数也是类似的方法。

首先知道2位数后到99有多长,在这里我算来算去都有点问题。我晕饿。

if(x>45&&x<=2位数总长)
for(i=10;;i++)
if(i*(i+1)/2>=x)
break;

x=x-i*(i-1)/2;
这里X可能大于9,不大于就是个位数。

大于9说明是2位数。
x就减去9,然后再除以2,有余数就要在商上+1+9,就等于这个数,且是十位上的数。
没有余数就说明是个位上的数。

饿,思路是有点乱的。不知道能否看懂。我回去写写看。
----------------解决方案--------------------------------------------------------
  相关解决方案