| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 391 人关注过本帖
标题:一个杭电小题 帮我看看哪有问题
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:4 回复次数:6 
一个杭电小题 帮我看看哪有问题
http://acm.hdu.
#include<stdio.h>
#include<math.h>
int main()
{
    long k,n;
    int a[46]={0,1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,9};
    scanf("%ld",&n);
    while(n--)
    {
        scanf("%ld",&k);
        if(k>45)
        {
            k=k-45;
            k=k%9;
            if(k==0)
                k=9;
        }
        else if(1<=k && k<=45)
            k=a[k];
        printf("%d\n",k);
    }
}
2010-03-17 18:52
hziee
Rank: 4
等 级:业余侠客
帖 子:64
专家分:257
注 册:2010-3-12
收藏
得分:0 
啥意思?

[ 本帖最后由 hziee 于 2010-3-17 21:59 编辑 ]
2010-03-17 21:53
mikelr
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:161
注 册:2010-3-17
收藏
得分:0 
是不是少了一个 return 0;
2010-03-17 22:03
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:0 
#include<stdio.h>
#include<math.h>
int main()
{
    long k,n;
    int a[46]={0,1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,9};
    printf("Enter n:");
    scanf("%ld",&n);
    while(n--)                    //循环条件,输入n值,循环n次
    {   
        printf("Enter k:");
        scanf("%ld",&k);
        if(k>45)
        {
            k=k-45;
            k=k%9;
            if(k==0)
                k=9;
        }
        else if(1<=k && k<=45)
            k=a[k];
        printf("%d\n",k);
    }
    return 0;

}

应该没有什么问题!!

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-03-17 22:32
b001lcp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2010-3-17
收藏
得分:0 
main()是int类型,需要返回值,添加后应该不会有问题
2010-03-17 22:40
hziee
Rank: 4
等 级:业余侠客
帖 子:64
专家分:257
注 册:2010-3-12
收藏
得分:4 
看了这个连接:http://acm.hdu.算懂了!楼主算法明显错误,而且不实用(1000位置的数怎么算?)。
介绍楼主一种算法:
由题目得知,S1=1个数,S2=2个数,SN=N个数,S=S1+S2+……SN=(1+N)*N/2个数,
当输入某个数M时,用(1+N)*N/2减去M,使结果>=0,
判断:
结果=0,则N(小于等于9)就是在SN第M个数,如M=1,15,21对应数为1,5,6,
        大于9时,如果n%9为0,则为9,否则为n%9.
结果>0,则(M-(N(N-1)/2))%9,就为SN第M个数:如M=44,223,其对应数为8,4,

代码如下:
#include<stdio.h>
#include<math.h>
int main()

{
   int k,n;
    printf("请输入你要查询数的位置");
    scanf("%d",&k);
    for(n=1;((n+1)*n/2)<k;n++){}
        if ((n+1)*n/2==k)
           {
            if(n<9)
          printf("你要查询的数字为%d\n",n);
           else
               {
                if(n%9==0)printf("你要查询的数为9");
                else
                printf("你要查询的数为%d",n%9);
               }

           }  
       else
       {
       n=(k-(n-1)*n/2)%9;
       printf("你要查询的数字为%d\n",n);
       }
return 0;
}



[ 本帖最后由 hziee 于 2010-3-19 21:51 编辑 ]
2010-03-17 23:10
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
回复 6楼 hziee
受教了,谢谢!!!!!!!!!!

学无止境!
2010-03-19 19:08
快速回复:一个杭电小题 帮我看看哪有问题
数据加载中...
 
   



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

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