P5721 【深基4.例6】数字直角三角形
题目描述
给出 n,请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 00。
输入格式
输入一个正整数 n。
输出格式
输出如题目要求的数字直角三角形。
输入输出样例
输入
5
输出
0102030405 06070809 101112 1314 15
说明/提示
数据保证,1≤n≤13。
代码实现
#include<stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
int count = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n-i+1; j++) {
printf("%02d", count++);
}
printf("\n");
}
return 0;
}
其中第一个 for 循环遍历行数,第二个for循环遍历每行的数字的个数,要注意的是我们这里要对第二个 for 的判断条件 +1,即: j <= n - i + 1;
定义的 count 是为了保证数字递增。
P1614 爱与愁的心痛
题目描述
最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。
输入格式
第一行有两个用空格隔开的整数,分别代表 n 和 m。
第 2 到第 (n+1) 行,每行一个整数,第 (i+1) 行的整数 ai 代表第 i 件事的刺痛值 ai。
输出格式
输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。
输入输出样例
输入
8 3 1 4 7 3 1 2 4 3
输出
6
说明/提示
数据规模与约定
- 对于 30%30% 的数据,保证 n≤20。
- 对于 60%60% 的数据,保证 n≤100。
- 对于 90%90% 的数据,保证 n≤103。
- 对于 100%100% 的数据,保证 0≤m≤n≤3×103,1≤ai≤100。
代码实现
#include<stdio.h>
int a[10005];
int main(void)
{
int n,m;
int min=0;
int tmp=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<m;i++) min+=a[i];
for(int i=1;i<=n-m;i++){
for(int j=i;j<i+m;j++){
tmp+=a[j];
}
if(min>tmp) min=tmp;
tmp=0;
}
printf("%d",min);
return 0;
}
首先根据题目要求的数据范围,我们要在 main 函数之前开一个大小为 10005 的数组大小。
其中第 12 行将刺痛值的最小值定义为 0 —— m-1 个连续数字的和。
第 13 行:由于上一行已经对m 个数加和,那么循环遍历的判断条件是 i <= n - m 即可。
第 14 行和第 12 行的思想一样,把每次从 i 开始的连续 m个数字加和,与之前的我们自己定义的 min 进行比较,如果 min > tmp ,则 min = tmp 。(即第 17 行)
最后最关键的一点是不要忘了将 tmp 再赋值为 0 。(某两人犯了好几次错误辽)
最后输出即可。