欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Day9 洛谷 1317+1401

Day9 洛谷 1317+1401

2025/5/20 9:07:40 来源:https://blog.csdn.net/m0_74983085/article/details/144308373  浏览:    关键词:Day9 洛谷 1317+1401

零基础洛谷刷题记录
Day1 2024.11.18
Day2 2024.11.25
Day3 2024.11.26
Day4 2024.11.28
Day5 2024.11.29
Day6 2024 12.02
Day7 2024.12.03
Day8 2024 12 05
Day9 2024.12.07



低洼地

1317:题目描述(改了n多次的题目)

一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?

如图:地高变化为 [0,1,0,2,1,2,0,0,2,0]。

1317:AC代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{int arr[10001];int n;scanf("%d", &n);for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int wadi = 0;int left = 0;int right = 0;for (int i = 1; i < n - 1; i++){if (arr[i] > arr[i - 1] || arr[i] > arr[i + 1])//根本不可能满足{continue;}if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1])//直接满足{wadi++;}else//可能满足{//对左边进行判断if (arr[i] < arr[i - 1])//左边直接满足{left = 1;}else if (arr[i] == arr[i - 1])//左边可能满足。往左边一个一个试{int j = 2;while (i - j >= 0){if (arr[i] < arr[i - j]){left = 1;break;}else if (arr[i] == arr[i - j]){j++;}else if (arr[i] > arr[i - j]){break;}}}if (left == 0)//左边不满足右边就不用管了{continue;}//右边判断if (arr[i] < arr[i + 1])//右边直接满足{right = 1;}else if (arr[i] == arr[i + 1])//右边可能满足{i++;//对于连续平齐点,只算一个洼地,因此i++防止后面重复计算while (i < n - 1)//判断的基本条件{if (arr[i] < arr[i + 1])//一比右边小就行{right = 1;break;}else if (arr[i] == arr[i + 1])//相等就继续右移,还有机会{i++;}else if (arr[i] > arr[i + 1])//大于就不可能了{break;}}}if (left == 1 && right == 1)//左右都满足就形成一个洼地{wadi++;}left = 0;right = 0;//重新置0}}printf("%d\n", wadi);return 0;
}

1317:学习成果

  • 深刻体会到什么叫做程序员的严谨,什么叫做牵一发动全身
  • 一些起决定性作用的语句放前面
  • 一道非常考研严谨的题目
  • 要学会自己想一些用例进行判断,用例应该有象征性,而不是一股脑下载数据
  • 下载下来的几组用例
  • (1)int:10
    0 1 1 1 1 0 1 1 1 0
  • (2)out:1
  • (3)int:200
    0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 0 4 9 7 4 2 5 8 6 4 5 8 6 1 3 4 5 6 8 7 7 4 5 7 5 7 5 4 3 8 6 3 3 3 4 6 7 2 5 8 7 5 9 3 4 5 6 7 8 7 6 5 3 2 3 4 7 6 4 8 6 5 6 5 2 4 7 8 9 6 7 8 2 3 7 8 5 6 7 8 5 3 4 9 7 6 4 5 6 8 7 5 3 5 9 8 6 7 8 7 8 7 7 8 9 2 3 4 5 7 8 6 5 4 5 7 6 7 8 9 0 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 0 4 9 7 4 2 5 8 6 4 5 8 6 1 3 4 5 6 8 7 7 4 5 7 5 7 5 4 3 8 6 3 3 3 4 6 7 2 5 8 7
  • (4)out:53
  • (5)in:100
    0 43 65 87 4 98 43 98 4 98 54 98 4 76 4 87 9 9 56 54 65 65 54 43 43 65 54 98 23 12 0 43 65 87 4 98 43 98 4 98 54 98 4 76 4 87 9 9 56 54 65 65 54 43 43 65 54 98 23 12 0 43 65 87 4 98 43 98 4 98 54 98 4 76 4 87 9 9 56 54 65 65 54 43 43 65 54 98 23 12 67 10 4 54 87 32 76 32 87 0
  • (6)out:36

禁止不开long long

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

在比赛中,根据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。

现在,给出两个 int 类型变量 x,y 及其取值范围,请问 x×y 的值是否可能超过 int 类型可以表示的范围?

提示:int 类型可以表示的范围为 [−2147483648,2147483647],也就是,int 类型可以表示的最小值为 −2147483648,最大值为 2147483647。

1401:AC代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{long long int x, y;long long int a, b, c, d;scanf("%lld %lld", &a, &b);scanf("%lld %lld", &c, &d);long long max_1 = abs(a) > abs(b) ? a : b;long long max_2 = abs(c) > abs(d) ? c : d;long long max = max_1 * max_2;if (max > 0){if (max > 2147483647){printf("long long int\n");}else{printf("int\n");}return 0;}else{if (max < -2147483648){printf("long long int\n");}else{printf("int\n");}return 0;}
}

1401:学习成果

  • 简单的比较,注意一点恒成立逻辑即可

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词