CSDN每日一练20230304(数组问题)

今天的每日一练都是数组问题,比较简单,一次遍历就够了

题目名称:最长递增的区间长度

题目描述

给一个无序数组,求最长递增的区间长度。如:[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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值