| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:北大PUK1003题
只看楼主 加入收藏
z8869113
Rank: 2
等 级:论坛游民
帖 子:44
专家分:14
注 册:2010-12-14
结帖率:75%
收藏
已结贴  问题点数:30 回复次数:5 
北大PUK1003题
这里先附上网址http://
以下是我的程序:
#include<stdio.h>
int main()
{
    int i,j=1;
    float a[5],n=2,s=0.5;        /*这里定义数组来存放输入的值*/
    for(i=0;i<5;i++)
        scanf("%f",&a[i]);
    for(i=0;i<5;i++)
    {
        if(a[i]<0.01||a[i]>5.20)    /*如果该数超出范围就直接换行*/
            printf("\n");
        else
    for(;a[i]>s;)        /*其他情况如果比s大就继续*/
    {
        n++;
        s+=(1/n);            /*s拿来累加*/
        j++;        /*这是计算片数的*/
        if(a[i]<=s)        /*当再加上一个数,a【i】被超过,就输出*/
        printf("%d card(s)\n",j);
        if(a[i]>=0.01&&a[i]<=0.5)
            printf("%d card(s)\n",j);
    }
    }
    return 0;
}
这样的话如果我输入1.2.3.4.5.没问题。
但是输入5.4.3.2.1的话就只能输出5的值。
我觉得就是s和j没还原。然后我改了一小小的地方
#include<stdio.h>
int main()
{
    int i,j=1;
    float a[5],n=2,s=0.5;        /*这里定义数组来存放输入的值*/
    for(i=0;i<5;i++)
        scanf("%f",&a[i]);
    for(i=0;i<5;i++,s=0.5,j=1)
    {
        if(a[i]<0.01||a[i]>5.20)    /*如果该数超出范围就直接换行*/
            printf("\n");
        else
    for(;a[i]>s;)        /*其他情况如果比s大就继续*/
    {
        n++;
        s+=(1/n);            /*s拿来累加*/
        j++;        /*这是计算片数的*/
        if(a[i]<=s)        /*当再加上一个数,a【i】被超过,就输出*/
        printf("%d card(s)\n",j);
        if(a[i]>=0.01&&a[i]<=0.5)
            printf("%d card(s)\n",j);
    }
    }
    return 0;
}
结果输入1.2.3.4.5就出现了我不知道的情况。。。求高人解救~~~半夜了,都被这个搞死了
搜索更多相关主题的帖子: 网址 
2011-04-24 01:20
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:15 
#include<stdio.h>
int main()
{
    int i,j=1;
    float a[5],n=2,s=0.5;        /*这里定义数组来存放输入的值*/
    for(i=0;i<5;i++)
        scanf("%f",&a[i]);
    for(i=0;i<5;i++)
    {
        if(a[i]<0.01||a[i]>5.20)    /*如果该数超出范围就直接换行*/
            printf("\n");
        else
        {
            n = 2 , s = 0.5 , j = 1 ;   //每次都得初始化值
            for(;a[i]>s;)        /*其他情况如果比s大就继续*/
            {
                n++;
                s+=(1/n);            /*s拿来累加*/
                j++;        /*这是计算片数的*/
                if(a[i]<=s)        /*当再加上一个数,a【i】被超过,就输出*/
                    printf("%d card(s)\n",j);
                if(a[i]>=0.01&&a[i]<=0.5)
                    printf("%d card(s)\n",j);
            }
        }
    }
    return 0;
}
2011-04-24 09:53
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:15 
楼上正确。
不过楼主的算法效率太低,尤其是测试压力大的时候。
这道题可以像下面这样写,效率会好很多:

程序代码:
#include <stdio.h>

int main() {
    int m_p[521], i, p;
    float dist;
    for (p = 1, dist = 0.5, i = 1; i <= 520; dist += 1.0 / ((++p) + 1)) {
        for(; i <= dist * 100; i++) {
            m_p[i] = p;
        }
    }
    scanf(" %f", &dist);
    while(dist > 0) {
        printf("%d card(s)\n", m_p[(int) (dist * 100)]);
        scanf(" %f", &dist);
    }
    return 0;
}
2011-04-24 15:12
z8869113
Rank: 2
等 级:论坛游民
帖 子:44
专家分:14
注 册:2010-12-14
收藏
得分:0 
回复 2楼 『点点滴滴』
谢谢~我忘了给n回值了,下面if还放错了

[ 本帖最后由 z8869113 于 2011-4-24 18:20 编辑 ]
2011-04-24 18:12
z8869113
Rank: 2
等 级:论坛游民
帖 子:44
专家分:14
注 册:2010-12-14
收藏
得分:0 
回复 3楼 voidx
代码很简单,有点看不懂。。。虽然不符合要求,但是很有用。谢谢了
2011-04-24 18:28
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 5楼 z8869113
怎么会不符合要求

[ 本帖最后由 voidx 于 2011-4-24 21:20 编辑 ]
2011-04-24 21:15
快速回复:北大PUK1003题
数据加载中...
 
   



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

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