云上day-01

目录

题目描述

输入格式

输出格式

解题步骤

解题代码

补充知识

题目描述

已知:S_{n}=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}。显然对于任意一个整数 k,当 n 足够大的时候,S_{n}>k

现给出一个整数 k,要求计算出一个最小的 n,使得 S_{n}>k

题目链接:P1035 [NOIP2002 普及组] 级数求和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

输入格式

一个正整数 k

输出格式

一个正整数 n

解题步骤

  1. 输入数据
  2. 求和S_{n}并判断,当满足S_{n}>k时退出
  3. 输出结果

解题代码

C代码

//头文件
//stdio.h:对应C中的输入输出函数的宏,i表示input(输入),o表示output(输出)
#include<stdio.h>

int main()//int表示返回值类型,int表示返回整形,void表示啥都不返回等
{
	int k;//定义输入变量k
	scanf("%d",&k);//输入数据k,记得一定要加取地址符&(字符串输入除外,没学字符串的可以先暂时不管)
	double sum = 0;//定义sum为和,一定是double类型
	int i = 0;//定义i为分母
	while(sum <= k){//sum > k时跳出循环
		i++;//由于i初始数据为0,因此先i先加一再进行求和
		sum += (1.0/i);//如果只有两个整数相除,将得到整数,即自动去掉小数部分;如果两个数中有一个是浮点数,将会把整数转变成浮点数后再进行运算,即得到浮点数
	}
	printf("%d",i);//输出答案
	return 0;
}

C++代码

//头文件:#include<iostream>定义了一些重要的类和对象,以及输入输出
#include<iostream>

//如果没有using namespace std,会报会报未声明变量cout和未声明变量endl,建议大家写的时候都加上
using namespace std;

//int main:int表示返回值类型为整形
int main()
{
    int k,i = 1;//k表示输入的整数,i表示求和的过程
    double sum = 0;//定义累加和,数据类型为double类型(高精度浮点数类型),并且要将初值赋值为0,不然会报错
    cin>>k;//输入k
    while(1){
        sum += (double)1 / i;     //累加1/i,要进行数据类型强制转换
        if(sum > k) break;      //当满足累加和大于输入的值,跳出循环
        i++;                    //每次循环对i+1
    }
    cout<<i;
    return 0;
}

Java代码

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        int i = 1;
        double sum = 0;//记录求和后的结果
        boolean flag = true;
        while(flag){//当满足题意时跳出循环
            sum += (double)1/i;//求和并强制转换为double型
            if(sum > t) break;//满足题意,跳出循环
            i ++;
        }
        System.out.println(i);
    }
}

补充知识

除法问题

//当‘/’两边都是整数时,即整数与整数相除,将自动去掉小数部分,得到的结果为整数
int result = 10 / 3;

printf("整除结果为:%d\n", result);
//上述将会输出3

//当‘/’有浮点数时(即float、double类型),则将会得到浮点数类型,即小数
double result = 0.5 / 3;//将会得到3.5

//如果想要得到的结果变成整数的话,可以使用强制转换,即在表达式前面加上括号()并写上转换后的数据类型
int result = (int)(10.5 / 3);

printf("整除结果为:%d\n", result);
//上述将会输出3,因为10.5 / 3 = 3.5,使用强转后去掉小数部分变成3

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值