今天的每日一练都是数组问题,比较简单,一次遍历就够了
题目名称:最长递增的区间长度
题目描述
给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3
输入描述:
第一行输入整数n。(1<=n<=10000)表示数组的大小 第二行给出n个整数a.(-1e9<=a<=1e9)
输出描述:
nan
示例
输入
6
5 2 3 8 1 9
输出
3
搞个计算器,递增就+1,否则就置1
#include <stdio.h>
#include <stdlib.h>
void solution(int n,int arr []) {
int s=1;
int tmp=1;
for (int i=1;i<n;i++) {
if(arr[i]>arr[i-1]) {
tmp++;
} else {
s=s>tmp?s:tmp;
tmp=1;
}
}
s=s>tmp?s:tmp;
printf("%d",s);
}
int main() {
int n;
scanf("%d", &n);
int* arr;
arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
solution(n, arr);
return 0;
}
题目名称:K皇把妹
题目描述
存在n个节点,目标节点在m。 每个节点有自己的权值a。 在权值k内选择一个权值非0节点且与目标节点距离最近。 节点i与节点j的距离为abs(i-j)。
输入描述:
第一行输入整数n,m,k.(1<=n,m,k<=100) 第二行输入n个整数的权值。(1<=a<=1000)
输出描述:
输出最小距离
示例
输入
7 3 50
62 0 0 0 99 33 22
输出
3
昨天的题目,昨天是从头遍历到尾,今天从m点向两边遍历,有一个满足条件就结束遍历
#include <stdio.h>
#include <stdlib.h>
void solution(int n, int m, int k, int arr []) {
int left=m-2;
int right=m;
int ret=1;
while(left>=0 || right<n) {
if(left>=0&&arr[left]>0&&arr[left]<=k) {
break;
}
if(right<n&&arr[right]>0&&arr[right]<=k) {
break;
}
ret++;
left--;
right++;
}
printf("%d",ret);
}
int main() {
int tem_arr[3];
for (int i = 0; i < 3; i++) {
scanf("%d", &tem_arr[i]);
}
int n = tem_arr[0];
int m = tem_arr[1];
int k = tem_arr[2];
int* arr;
arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
solution(n, m, k, arr);
return 0;
}
题目名称:吃!吃!吃!
题目描述
已知n个整数。 每3个数算一个周期。 不足一个周期补0. 在周期的第一个位置的数的权值和等于a1+a[1+3]+… … 求三个数的最大权值。 如果最大权值为第一个数,输出’J’; 最大权值为第二个数,输出’H’; 最大权值为第三个数,输出’B’。
输入描述:
第一行输入一个整数n。(1<=n<=100) 第二行输入n个整数。
输出描述:
输出答案。
示例
输入
4
1 1 1 1
输出
J
就是对应位置上的数求和
S1=∑a3i
S2=∑a3i+1
S3=∑a3i+2
之后比大小就行
还好没有2个最大值相等的情况
#include <stdio.h>
#include <stdlib.h>
void solution(int n, int arr []) {
int s[3]= {
0
}
;
for (int i=0;i<n;i++) {
int pos=i%3;
s[pos]+=arr[i];
}
if(s[0]>s[1]&&s[0]>s[2]) {
printf("J");
}
if(s[1]>s[0]&&s[1]>s[2]) {
printf("H");
}
if(s[2]>s[1]&&s[2]>s[0]) {
printf("B");
}
}
int main() {
int n;
scanf("%d", &n);
int* arr;
arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
solution(n, arr);
return 0;
}