• c语言练习:POJ 1003 宿醉(HangOver)


    为什么写这篇文章

    作为一名计算机相关方向的学生,本人的代码能力却十分差劲,这不能不让人万分羞愧。于是,决定从此好好学代码,每天坚持刷题。而C语言是计算机程序语言的基础,遂决定从c语言开始,提高自身编程能力。

    题目内容

    描述

    你能把一叠纸牌悬在桌子上多远?如果您有一张卡,则可以创建最大悬垂的一半卡长度。(我们假设卡片必须垂直于桌子。使用两张牌,您可以使顶部的牌悬垂在底部的半张牌长度上,而底部的牌悬垂在桌子上的三分之一,总最大悬垂为 1/2 + 1/3 = 5/6 牌长。一般来说,你可以让n张卡悬垂1/2 + 1/3 + 1/4 + ...+ 1/(n + 1) 牌长,其中最上面的牌悬垂第二张牌 1/2,第二张牌悬垂三分之一 1/3,第三张牌悬垂第四张牌 1/4,依此类推,底牌悬垂 1/(n + 1)。

    输入

    输入由一个或多个测试用例组成,后跟一行包含数字 0.00 的行,表示输入结束。每个测试用例都是一行,其中包含一个正浮点数 c,其值至少为 0.01,最多为 5.20;c 将正好包含三位数字。

    输出

    对于每个测试用例,输出实现至少 c 卡长度的悬垂所需的最小卡数。使用示例中所示的确切输出格式。

    示例输入

    1.00
    3.71
    0.04
    5.19
    0.00
    

    示例输出

    3 card(s)
    61 card(s)
    1 card(s)
    273 card(s)

    思路与代码

    思路比较简单,题目也属于比较基础的题目,简单来说:

    主循环(外部循环): 使用scanf函数从标准输入读取一个浮点数c,代表目标悬垂长度。 循环会持续进行,直到用户输入0.00为止。

    内部循环和计算 : 对于每一个输入的c,初始化纸牌数量i为0和累加器sum为0。 使用内部while循环来计算需要多少张纸牌才能使得悬垂长度至少为c。 在每次内部循环迭代中,纸牌数量i增加1,同时累加器sum增加1.0 / (i + 1)(即第i张纸牌悬垂的长度)。 当sum达到或超过c时,内部循环停止。

    输出结果 : 使用printf函数输出所需的纸牌数量i。

    代码如下:

    1. #include<stdio.h>
    2. int main()
    3. {
    4. float c,sum;
    5. while(scanf("%f",&c)==1&&c!=0.00)
    6. {
    7. int i=0;
    8. sum=0;
    9. while(sum<c)
    10. {
    11. i++;
    12. sum=sum+(1.0/(i+1));
    13. }
    14. printf("%d card(s)\n",i);
    15. }
    16. printf("\n");
    17. return 0;
    18. }

    运行结果如下:

    提交成功:

    注意事项:虽然题目不难,但途中我也遇到很多报错,解决报错了,出来的结果有时候也奇奇怪怪。后来发现,有时候是sum在每次循环开始并没有重新赋初始值;有时候又是因为整数与整数相除结果为整数,所以需要把1改成1.0。所以说从这简单的小题目中也能看出本人代码知识的不扎实了,还需继续努力。

    这次就到这里,与大家共勉。

  • 相关阅读:
    VUE笔记
    抖音实战~发布短视频流程梳理
    C++基础入门
    DSP_TMS320F28335_优秀的串口通信框架
    基于模糊BP神经网络轨迹跟踪(Matlab代码实现)
    大二学生基于Html+Css+javascript的网页制作——动漫设计公司响应式网站模板 (10个页面)
    java毕业设计基于javaweb+mysql数据库实现的在线学习网站|在线课堂含论文+开题报告
    关于良率:交期延误、报废补料、不做退款都是什么情况?
    mysql存储引擎
    图像分割简述
  • 原文地址:https://blog.csdn.net/m0_63002183/article/details/139486609