Bootstrap

Day2 洛谷1035+1047+1085+1089+1150+1151

零基础洛谷刷题记录

Day1 2024.11.18
Day2 2024.11.25



级数求和

1035:题目描述

已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个整数 k,当 n 足够大的时候,Sn>k。现给出一个整数 k,要求计算出一个最小的 n,使得 Sn>k

1035:解答代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int k;
	scanf("%d", &k);
	double sum = 1;
	int i = 2;
	while (sum <= k)
	{
		sum += (1.0 / i);
		i++;
	}
	printf("%d", i - 1);
	return 0;
}

1035:学习成果

  • 整数相除
7/2=3
7%2=1
  • 浮点数相除
#include<stdio.h>
int main()
{
    float a = 7.0 / 2;
    printf("%f\n", a);
        return 0;
}

校门外的树

1047:题目描述(成功写出)

某校大门外长度为 l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 l 的位置;数轴上的每个整数0,1,2,…,l,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

1047:解答代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int length;
	int number;
	scanf("%d %d", &length, &number);
	int all = length + 1;

	int arr[10000];

	for (int j = 0; j <= length; j++)
	{
		arr[j] = 1;
	}
	for (int i = 0; i < number; i++)
	{
		int  left;
		int right;
		scanf("%d %d", &left, &right);

		for (int j = left; j <= right; j++)
		{
			arr[j] = 0;
		}
	}
	int answer = 0;
	for (int j = 0; j <= length; j++)
	{
		if (arr[j] == 1)
		{
			answer++;
		}
	}
	printf("%d\n", answer);
	return 0;
}

1047:学习成果

  • 成功想出标记的思路,非常好

不高兴的津津

1085:题目描述(成功写出)

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴

1085:解答代码·

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int sum = 0;
	int max = 0;
	int day = 1;
	int school;
	int mother;

	for (int i = 1; i < 8; i++)
	{
		scanf("%d %d", &school, &mother);
		sum = school + mother;
		if (sum > max)
		{
			max = sum;
			day = i;
		}
	}
	if (max <= 8)
	{
		day = 0;
	}
	printf("%d\n", day);
	return 0;
}

1085:学习成果

  • 利用逐项比较的方式得到答案

津津的储蓄计划

1089:题目描述(成功写出)

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如 11月初津津手中还有 83 元,妈妈给了津津 300 元。津津预计11月的花销是 180 元,那么她就会在妈妈那里存 200 元,自己留下 183 元。到了 11 月月末,津津手中会剩下 3 元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据 2004 年 1 月到 12 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 2004 年年末,妈妈将津津平常存的钱加上 20% 还给津津之后,津津手中会有多少钱。

1089:解答代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int addtion = 0;
	int hand = 0;
	int deposit = 0;
	int number = 0;

	for (int i = 1; i < 13; i++)
	{
		hand += 300;
		int budget;
		scanf("%d", &budget);

		if (hand < budget)
		{
			printf("-%d\n", i);
			return 0;
		}
		addtion = hand - budget;
		if (addtion >= 100)
		{
			number = addtion / 100;
			deposit += number * 100;
			hand = hand - number * 100;
		}
		hand = hand - budget;
	}

	int out = deposit * 1.2 + hand;
	printf("%d\n", out);

	return 0;
}

1089:学习成果

  • 思路清晰即可

prter的烟

1150:题目描述(成功写出)

Peter 有 n 根烟,他每吸完一根烟就把烟蒂保存起来,k(k>1)个烟蒂可以换一个新的烟,那么 Peter 最终能吸到多少根烟呢?

1150:解题代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int remain = 0;
	int n;
	int k;
	scanf("%d %d", &n, &k);
	int all = n;

	remain += n;
	while (remain >= k)
	{
		int i = remain / k;
		int j = remain % k;
		remain = j + i;
		all += i;
	}
	printf("%d\n", all);
	return 0;
}

1150:学习成果

  • 逻辑清晰即可

子树整数

1151:题目描述(成功写出)

现在给定一个正整数 K,要求你编程求出 10000 到 30000 之间所有满足下述条件的五位数,条件是这些五位数的三个子数 sub 1,sub 2 ,sub 3 都可被 K 整除。

1151:解题代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int k;
	scanf("%d", &k);
	int tag = 0;

	for (int i = 10000; i <= 30000; i++)
	{
		int num1 = i / 100;
		int num2 = i % 1000;
		int num3 = (i / 10) % 1000;
		if (num1 % k == 0 && num2 % k == 0 && num3 % k == 0)
		{
			printf("%d\n", i);
			tag = 1;
		}
	}
	if (tag == 0)
	{
		printf("No\n");
	}
	return 0;
}

1151:学习成果

  • 逻辑清晰即可

总结

;