零基础洛谷刷题记录
Day01 2024.11.18
Day02 2024.11.25
Day03 2024.11.26
Day04 2024.11.28
Day05 2024.11.29
Day06 2024 12.02
Day07 2024.12.03
Day08 2024 12 05
Day09 2024.12.07
Day10 2024.12.09
Day11 2024 .12.10
文章目录
- 零基础洛谷刷题记录
- 1307:题目描述(成功写出)
- 1307:AC代码
- 1307:学习成果
- 1321:题目描述(成功写出)
- 1321:AC代码
- 1321:学习成果
- 1482:题目描述(成功写出)
- 1482:AC代码
- 1482:学习成果
数字反转
1307:题目描述(成功写出)
给定一个整数 N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零
1307:AC代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{long long int N;scanf("%lld", &N);if (N == 0){printf("0\n");}else{int tag = 0;if (N < 0){tag = 1;N = abs(N);}long long int reverse = 0;int arr[11];int i = 1;while (N){arr[i++] = N % 10;N /= 10;}int j = --i;while (i){reverse += arr[i] * pow(10, j - i);i--;}if (tag == 1){reverse = -reverse;}printf("%lld\n", reverse);}return 0;
}
1307:学习成果
- 一个很常见的算法
单词覆盖还原
1321:题目描述(成功写出)
我有一个长度为 l 的字符串,最开始时,这个字符串由 l 个句号(.)组成。
我在这个字符串中,将多次把 boy 或者 girl 两单词,依次贴到这个字符串中。
后贴上单词,会覆盖之前贴上的单词,或者覆盖句号。最终,每个单词至少有一个字符没有被覆盖。
请问,一共贴有几个 boy 几个 girl?
1321:AC代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{char arr[256];scanf("%s", arr);int number_boy = 0;int number_girl = 0;for (int i = 0; arr[i] != '\0'; i++){if ((arr[i] == 'b' && arr[i + 1] != 'o') || (arr[i] == 'o' && arr[i + 1] != 'y') || (arr[i] == 'y')){number_boy++;}else if ((arr[i] == 'g' && arr[i + 1] != 'i') || (arr[i] == 'i' && arr[i + 1] != 'r') || (arr[i] == 'r' && arr[i + 1] != 'l') || (arr[i] == 'l')){number_girl++;}}printf("%d\n", number_boy);printf("%d\n", number_girl);return 0;
}
1321:学习成果
- 轻轻松松啦
Cantor表(升级版)
1482:题目描述(成功写出)
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
这次与 NOIp1999 第一题不同的是:这次需输入两个分数(不一定是最简分数),算出这两个分数的积(注意需要约分至最简分数),输出积在原表的第几列第几行(若积形如 a(即结果为整数)或者 1/a,则看作表内的 a/1 或 1/a 结算)。
1482:AC代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{char num_1[10];int num_1_zi=0;int num_1_mu=0;char num_2[10];int num_2_zi=0;int num_2_mu=0;scanf("%s", num_1);scanf("%s", num_2);int i;for (i = 0; num_1[i] != '\0'; i++){if (num_1[i] == '/'){num_1_zi = i;}}num_1_mu = i - num_1_zi - 1;for (i = 0; num_2[i] != '\0'; i++){if (num_2[i] == '/'){num_2_zi = i;}}num_2_mu = i - num_2_zi - 1;int zi_1 = 0;int mu_1 = 0;int zi_2 = 0;int mu_2 = 0;for (i = 0; i < num_1_zi; i++){zi_1 += (int)(num_1[i]-48) * pow(10, num_1_zi - i-1);}for (int j = i + 1; j <= i + num_1_mu; j++){mu_1 += (int)(num_1[j]-48) * pow(10, i + num_1_mu - j);}for (i = 0; i < num_2_zi; i++){zi_2 += (int)(num_2[i]-48) * pow(10, num_2_zi - i-1);}for (int j = i + 1; j <= i + num_2_mu; j++){mu_2 += (int)(num_2[j]-48) * pow(10, i + num_2_mu - j);}long long int answer_zi = zi_1 * zi_2;long long int answer_mu = mu_1 * mu_2;//化简分式int min = answer_zi < answer_mu ? answer_zi : answer_mu;for (int j = 2; j <= min; j++){if (answer_zi % j == 0 && answer_mu % j == 0){answer_zi /= j;answer_mu /= j;j = 1;min = answer_zi < answer_mu ? answer_zi : answer_mu;}}printf("%d %d\n", answer_mu, answer_zi);return 0;
}
1482:学习成果
- 学习一:如何从字符串中取出数字
- 学习二:如何化简分式