当前位置:   article > 正文

每周记录23/11/19_c语言洛谷使用英文标点符号; hello,world! 逗号后面没有空格。 h 和 w 为大写字母

c语言洛谷使用英文标点符号; hello,world! 逗号后面没有空格。 h 和 w 为大写字母

【入门1】顺序结构 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.

编写一个能够输出 Hello,World! 的程序。

提示:

  • 使用英文标点符号;
  • Hello,World! 逗号后面没有空格。
  • H 和 W 为大写字母。

输入格式

输出格式

输入输出样例

输入 #1

输出 #1

Hello,World!
  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf("Hello,World!");
  5. return 0;
  6. }

2.

用 * 构造一个对角线长 5 个字符,倾斜放置的菱形。

输入格式

没有输入要求。

输出格式

如样例所示。用 * 构成的菱形。

输入输出样例

输入 #1

 

输出 #1

  *
 ***
*****
 ***
  *
  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf(" *\n ***\n*****\n ***\n *");
  5. return 0;
  6. }

3.

超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。

  1. ********
  2. ************
  3. ####....#.
  4. #..###.....##....
  5. ###.......###### ### ###
  6. ........... #...# #...#
  7. ##*####### #.#.# #.#.#
  8. ####*******###### #.#.# #.#.#
  9. ...#***.****.*###.... #...# #...#
  10. ....**********##..... ### ###
  11. ....**** *****....
  12. #### ####
  13. ###### ######
  14. ##############################################################
  15. #...#......#.##...#......#.##...#......#.##------------------#
  16. ###########################################------------------#
  17. #..#....#....##..#....#....##..#....#....#####################
  18. ########################################## #----------#
  19. #.....#......##.....#......##.....#......# #----------#
  20. ########################################## #----------#
  21. #.#..#....#..##.#..#....#..##.#..#....#..# #----------#
  22. ########################################## ############

输入格式

输出格式

如描述

输入输出样例

  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf(" ********\n ************\n ####....#.\n #..###.....##....\n ###.......###### ### ###\n ........... #...# #...#\n ##*####### #.#.# #.#.#\n ####*******###### #.#.# #.#.#\n ...#***.****.*###.... #...# #...#\n ....**********##..... ### ###\n ....**** *****....\n #### ####\n ###### ######\n##############################################################\n#...#......#.##...#......#.##...#......#.##------------------#\n###########################################------------------#\n#..#....#....##..#....#....##..#....#....#####################\n########################################## #----------#\n#.....#......##.....#......##.....#......# #----------#\n########################################## #----------#\n#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n########################################## ############");
  5. return 0;
  6. }

很暴力的破解,直接删掉换行改成\n

4.

输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤10^9)。

注意

  1. Pascal 使用 integer 会爆掉哦!
  2. 有负数哦!
  3. C/C++ 的 main 函数必须是 int 类型,而且 C 最后要 return 0。这不仅对洛谷其他题目有效,而且也是 NOIP/CSP/NOI 比赛的要求!

输入格式

两个以空格分开的整数。

输出格式

一个整数。

输入输出样例

输入 #1

20 30

输出 #1

50
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a,b;
  5. scanf("%d %d",&a,&b);
  6. printf("%d\n", a+b);
  7. return 0;
  8. }

5.

给定一个字符,用它构造一个底边长 5个字符,高 3个字符的等腰字符三角形。

输入格式

输入只有一行,包含一个字符。

输出格式

该字符构成的等腰三角形,底边长 5 个字符,高 3 个字符。

输入输出样例

输入 #1

*

输出 #1

  *
 ***
*****

说明/提示

对于 100% 的数据,输入的字符是 ASCII 中的可见字符。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char c;
  5. scanf("%c",&c);
  6. printf(" %c\n %c%c%c\n%c%c%c%c%c",c,c,c,c,c,c,c,c,c);
  7. return 0;
  8. }

直接改成输出指定字符就行了。

6.

现在需要采购一些苹果,每名同学都可以分到固定数量的苹果,并且已经知道了同学的数量,请问需要采购多少个苹果?

输入格式

输入两个不超过 10^9正整数,分别表示每人分到的数量和同学的人数。

输出格式

一个整数,表示答案。保证输入和答案都在 int 范围内的非负整数。

输入输出样例

输入 #1

5 3

输出 #1

15
  1. #include<stdio.h>
  2. int main()
  3. {
  4. long a,b;
  5. scanf("%ld %ld",&a,&b);
  6. printf("%ld",a*b);
  7. return 0;
  8. }

7.

输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。

输入格式

输出格式

输入输出样例

输入 #1

q

输出 #1

Q
  1. #include<stdio.h>
  2. int main()
  3. {
  4. char a;
  5. a=getchar();
  6. putchar(a-32);
  7. return 0;
  8. }

大写字母比小写字母在ASCII码7中小32,直接减掉就行。

8.

输入一个不小于 100 且小于1000,同时包括小数点后一位的一个浮点数,例如 123.4 ,要求把这个数字翻转过来,变成 4.321 并输出。

输入格式

一行一个浮点数

输出格式

一行一个浮点数

输入输出样例

输入 #1

123.4

输出 #1

4.321
  1. #include<stdio.h>
  2. int main()
  3. {
  4. char a,b,c,d,e;
  5. a=getchar();
  6. b=getchar();
  7. c=getchar();
  8. d=getchar();
  9. e=getchar();
  10. putchar(e);
  11. putchar(d);
  12. putchar(c);
  13. putchar(b);
  14. putchar(a);
  15. return 0;
  16. }

看成把五个字符倒序输出就行了。

9.

现在有 t 毫升肥宅快乐水,要均分给 n 名同学。每名同学需要 22 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 33 位),以及一共需要多少个杯子。

输入格式

输入一个实数 t 和一个正整数 n,使用空格隔开。

输出格式

输出两行。

第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。

输入输出样例

输入 #1

500.0 3

输出 #1

166.667
6

说明/提示

对于所有数据,0≤t≤10000 且小数点后不超过 3 位,1≤n≤1000。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. float a;
  5. int b;
  6. scanf("%f %d",&a,&b);
  7. printf("%.3f\n%d",a/b,b*2);
  8. return 0;
  9. }

10.

一个三角形的三边长分别是 a、b、c,那么它的面积为 p(p−a)(p−b)(p−c)​,其中p=21​(a+b+c)。输入这三个数字,计算三角形的面积,四舍五入精确到 1 位小数。

输入格式

第一行输入三个实数 a,b,c,以空格隔开。

输出格式

输出一个实数,表示三角形面积。精确到小数点后 1 位。

输入输出样例

输入 #1

3 4 5

输出 #1

6.0

说明/提示

数据保证能构成三角形,0≤a,b,c≤1000,每个边长输入时不超过 2 位小数。

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. float a,b,c;
  6. double s,area;
  7. scanf("%f %f %f",&a,&b,&c);
  8. s=(a+b+c)/2.0;
  9. area=sqrt(s*(s-a)*(s-b)*(s-c));
  10. printf("%.1f",area);
  11. return 0;
  12. }

11.

学校和 yyy 的家之间的距离为 s 米,而 yyy 以 v 米每分钟的速度匀速走向学校。

在上学的路上,yyy 还要额外花费 10 分钟的时间进行垃圾分类。

学校要求必须在上午 8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。

由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。

输入格式

一行两个正整数 s,v,分别代表路程和速度。

输出格式

输出一个 24 小时制下的时间,代表 yyy 最晚的出发时间。

输出格式为 HH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 0。

输入输出样例

输入 #1

100 99

输出 #1

07:48

说明/提示

对于 100% 的数据,1≤s,v≤104。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a, b, end = 8 * 60 - 10;
  5. scanf("%d %d", &a, &b);
  6. if (a % b)
  7. a = a / b + 1;
  8. else
  9. a /= b;
  10. end -= a;
  11. if(end<0)
  12. end+=24*60;
  13. printf("%02d:%02d", end / 60, end % 60);
  14. return 0;
  15. }

最有点磕绊的题目,其实也就加个进一取整和时间倒退一天的判断就行,为了提高可读性将分钟的计算都详细写在代码里了。

12.

一只大象口渴了,要喝 20 升水才能解渴,但现在只有一个深 h 厘米,底面半径为 r 厘米的小圆桶 (h 和 r 都是整数)。问大象至少要喝多少桶水才会解渴。

Update:数据更新,这里我们近似地取圆周率 π=3.14。

输入格式

输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深 h 和底面半径 r,单位都是厘米。

输出格式

输出一行,包含一个整数,表示大象至少要喝水的桶数。

输入输出样例

输入 #1

23 11

输出 #1

3

说明/提示

数据规模与约定

对于全部的测试点,保证 1≤h≤500,1≤r≤100。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a,b;
  5. float k;
  6. scanf("%d %d",&a,&b);
  7. k=a*b*b*3.14;
  8. printf("%d",(int)(20000/k+1));
  9. return 0;
  10. }

13.

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。

这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 24 小时制计算),它发现自己从 a 时 b 分一直游泳到当天的 c 时 d 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?

小鱼游的好辛苦呀,你可不要算错了哦。

输入格式

一行内输入四个整数,以空格隔开,分别表示题目中的 a,b,c,d。

输出格式

一行内输出两个整数 e 和 f,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 f 应该小于 60。

输入输出样例

输入 #1

12 50 19 10

输出 #1

6 20

说明/提示

对于全部测试数据,0≤a,c≤24,0≤b,d≤60,且结束时间一定晚于开始时间。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a,b,c,d;
  5. scanf("%d %d %d %d",&a,&b,&c,&d);
  6. a=c*60+d-a*60-b;
  7. printf("%d %d",a/60,a%60);
  8. return 0;
  9. }

分钟的简单计算。

14.

班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 1 元 9 角,而班主任给小玉的钱是 a 元 b 角,小玉想知道,她最多能买多少只签字笔呢。

输入格式

输入只有一行两个整数,分别表示 a 和 b。

输出格式

输出一行一个整数,表示小玉最多能买多少只签字笔。

输入输出样例

输入 #1

10 3

输出 #1

5

说明/提示

数据规模与约定

对于全部的测试点,保证 0≤a≤10^4,0≤b≤9。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a,b;
  5. scanf("%d %d",&a,&b);
  6. printf("%d",(a*10+b)/19);
  7. return 0;
  8. }

15.NOIP2017 普及组 T1

牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:

总成绩=作业成绩×20%+×20%+小测成绩×30%+×30%+期末考试成绩×50%×50%

牛牛想知道,这门课程自己最终能得到多少分。

输入格式

三个非负整数 A,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是 100 分。

输出格式

一个整数,即牛牛这门课程的总成绩,满分也是 100 分。

输入输出样例

输入 #1

100 100 80 

输出 #1

90

输入 #2

60 90 80 

输出 #2

79

说明/提示

输入输出样例 1 说明

牛牛的作业成绩是 100 分,小测成绩是 100 分,期末考试成绩是 80 分,总成绩是100×20%+100×30%+80×50%=20+30+40=90。

输入输出样例 2 说明

牛牛的作业成绩是 60 分,小测成绩是 90 分,期末考试成绩是 80 分,总成绩是 60×20%+90×30%+80×50%=12+27+40=79。

数据说明

对于 30% 的数据,A=B=0。

对于另外 30% 的数据,A=B=100。

对于 100% 的数据,0≤A,B,C≤100 且 A,B,C 都是 10 的整数倍。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a,b,c;
  5. scanf("%d %d %d",&a,&b,&c);
  6. printf("%d",a*2/10+b*3/10+c*5/10);
  7. return 0;
  8. }

大概了解了竞赛出题和答题的一个规范形式吧。

以上题目时间复杂度和空间复杂度都是O(1)。

16.线段树算法

是基于平衡二叉树的形式,再运用递归思想得到的算法。

170393056283430b9e429bc80d90f91e.png

我写的最初步的线段树每个节点保存原数组值或者分支的值之和,包含建立线段树,修改数据和查询数据三种函数。普通数组修改的时间复杂度O(1),查询的时间复杂度O(n)。线段树两者都是O(logn)所以在两个函数调用次数多的且均匀分布情况下所用时间更少。

  1. #include<stdio.h>
  2. void buildtree(int arr[], int tree[], int node, int L, int R)
  3. {
  4. int mid = (L + R) / 2;
  5. int lnode = node * 2 + 1;
  6. int rnode = node * 2 + 2;
  7. if (L == R)
  8. tree[node] = arr[R];
  9. else
  10. {
  11. buildtree(arr, tree, lnode, L, mid);
  12. buildtree(arr, tree, rnode, mid + 1, R);
  13. tree[node] = tree[lnode] + tree[rnode];
  14. }
  15. }
  16. void update(int arr[], int tree[], int node, int L, int R, int index,int val)
  17. {
  18. int mid = (L + R) / 2;
  19. int lnode = node * 2 + 1;
  20. int rnode = node * 2 + 2;
  21. if (L == R)
  22. tree[node] = val;
  23. else
  24. {
  25. if (index <= mid)
  26. update(arr, tree, lnode, L, mid, index, val);
  27. else
  28. update(arr, tree, rnode, mid + 1, R, index, val);
  29. tree[node] = tree[lnode] + tree[rnode];
  30. }
  31. }
  32. int query(int arr[], int tree[], int node, int L, int R,int Start, int End)
  33. {
  34. int sum=0;
  35. int mid = (L + R) / 2;
  36. int lnode = node * 2 + 1;
  37. int rnode = node * 2 + 2;
  38. if (L >= Start && R <= End)
  39. return tree[node];
  40. else
  41. {
  42. sum = query(arr, tree, lnode, L, mid, Start, End) + query(arr, tree, rnode, mid + 1, R, Start, End);
  43. }
  44. return sum;
  45. }
  46. int main()
  47. {
  48. int arr[] = { 1,2,3,4,5,6 }, tree[100] = { 0 };
  49. buildtree(arr, tree, 0, 0, 5);
  50. arr[0] = 7;
  51. update(arr, tree, 0, 0, 5, 0, 7);
  52. for (int i = 0; i < 15; i++)
  53. printf("%d\n", tree[i]);
  54. printf("%d\n", query(arr,tree,0,0,5,0,5));
  55. return 0;
  56. }

自己写的线段树,可能有很多冗余部分。(树状数组正在学!!)

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/877654
推荐阅读
相关标签
  

闽ICP备14008679号