| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4608 人关注过本帖
标题:[讨论]第五期题目,大家做做.
只看楼主 加入收藏
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
以下是引用senyee在2006-12-12 21:35:49的发言:
第一题的题意还是不怎么懂
英语水平有限.....
能介绍清楚点吗?


就是有个有序的数字1 12 123 1234 12345 123456…………
这样无限下去。且组合起来。

输入一个数,这个数表示在以上这个序列中的序号。然后输出相应序号的那个数。

比如:

输入:3 输出:2
输入:6 输出:3


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-12-12 21:46
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

我的想法是把每一个数对应有多少个数字保存起来.并且有下面的递推式:


a[i]=a[i-1]+i的位数.i!=0
a[i]=0; i==0
与此同时做while(num>a[i])num-=a[i];一次循环可以出来.
则循环退出时,num必定在某个a[i]范围内.此时我只要将从1到i所有的数字求出来b[j](j从1开始保存),我就知道num对应的数字了.
是b[num];

不知道这样的想法是否正确...


倚天照海花无数,流水高山心自知。
2006-12-12 22:02
abcBoy
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-12-13
收藏
得分:0 
[CODE]#include <iostream>
using namespace std;
int main()
{
long long i,j,n;
bool tag;
while(cin>>n)
{
j=1,tag=false;
if(n%2)
{
for(i=1;i<=n;i++)
{
j<<=1;
if(j>n)
j%=n;
if(j==1)
{
tag=true;
break;
}
}
}
if(tag)
cout<<"2^"<<i<<" mod "<<n<<" = 1"<<endl;
else cout<<"2^? mod "<<n<<" = 1\n";
}
return 0;
}[/CODE]
the second one.
2006-12-13 16:07
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
以下是引用nuciewth在2006-12-12 22:02:42的发言:

我的想法是把每一个数对应有多少个数字保存起来.并且有下面的递推式:


a[i]=a[i-1]+i的位数.i!=0
a[i]=0; i==0
与此同时做while(num>a[i])num-=a[i];一次循环可以出来.
则循环退出时,num必定在某个a[i]范围内.此时我只要将从1到i所有的数字求出来b[j](j从1开始保存),我就知道num对应的数字了.
是b[num];

不知道这样的想法是否正确...

那干吗不实现下自己的想法呢?
每个数对应的数字个数:
a[i]=a[i-1]+i
这个有点奇怪哦,
当i=1时,a[1]=1
i=2,a[2]=3了吧?还是我理解错了,请说详细点。难道要a[2]-a[1]才是?

饿,对的。下面就是num-=a[i]。
试下吧。


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-12-14 10:30
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
[CODE]
#include <stdio.h>
main()
{
long x;
int i,a;
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);
}

if(x>45&&x<=9045)
{
for(i=10;;i++)
if(i*(i+1)/2+(i-9)*(i-8)/2>=x) break;

i=i-1;
x=x-i*(i+1)/2-(i-9)*(i-8)/2;

if(x>9)
{
x=x-9;
if(x%2)
{
x=x/2+9+1;
x=(x/10)%10;
printf("%d",x);
}
else
{
x=x/2+9;
x=x%10;
printf("%d",x);
}
}
else
printf("%d",x);
}
}
[/CODE]

这是前2位数的。

可以算哦。输入依然没改正。SORRY

我都只有死算了。。。T。T可悲咧!

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-12-14 10:51
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
1 2 3 4 ...9 10 11 12...
1 2 3 4 ...9 11 13 15...

实现过了,WA.
觉得想法应该没有错.

倚天照海花无数,流水高山心自知。
2006-12-14 13:54
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 

因为10要拆成2个数。

而你在每个数对应的位数计算时把10当成了1个数。所以就会这样了嘛。看来还是要死算。。。

我原本也以为你的这个办法能让我少算点东西呢。呵呵!


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-12-14 15:09
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
我的10是拆成两个数啊,要不然也不会是11了.

倚天照海花无数,流水高山心自知。
2006-12-14 15:27
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
那哪不对了?我没看懂。

是不是输入与输出不符合呀?

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-12-14 15:35
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
具体是,把num缩小在某个a[i]范围之内   (if(num&gt;a[i]){num-=a[i];}),    然后把1--i中所有的数字顺序保存在b[]中,此时b[num]就是输出.

倚天照海花无数,流水高山心自知。
2006-12-14 15:55
快速回复:[讨论]第五期题目,大家做做.
数据加载中...
 
   



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

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