第一次测试

附近的最小值

Description

fly学姐有一个序列a[1],a[2],...,a[n]。

给定一个正整数k,请问对于每一个1到n之间的序号i,a[i−k],a[i−k+1],...,a[i+k]这2k+1个数中的最小值是多少?

当某个下标超过1到n的范围时,数不存在,求最小值时只取存在的那些值。

Input

输入的第一行包含一整数n。

第二行包含n个整数,分别表示a[1],a[2],...,a[n]。

第三行包含一个整数k。

Output

输出一行,包含n个整数,分别表示对于每个序号求得的最小值

Sample Input 1 

5
5 2 7 4 3
1

Sample Output 1

2 2 2 3 3

Hint

对于 30% 的评测用例,1<=n<=1000,1<=a[i]<=1000。

对于 50% 的评测用例,1<=n<=10000,1<=a[i]<=10000。

对于所有评测用例,1<=n<=1000000,1<=a[i]<=100000

在纸上用笔写写十分简单,没什么难的

#include <stdio.h>
int main()
{
	int n,k;
	int i,j;
	int a[1000001];
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&k);
	for(j=1;j<=n;j++)
	{
		int min=9999999;
		//printf("66666");
		for(i=j-k;i<=j+k;i++)
		{
			if(i>=1&&i<=n)
			{
				if(min>a[i])
				{
					min=a[i];
				}
			}
		}
		printf("%d ",min);		
	}
}

环形杀人事件

Description

一天,杀人狂魔李华突然想要杀人,就把他抓来的N个英雄依次分配一个编号,第一个人的编号为1号,第二个人的编号为2号,第N个人的编号就为N号,他们按顺序围成一个环形,现在给出一个数字M,第一个人开始从1报数,第二个人报的数就是2,依次类推,报到M这个数字的人被杀了(1a秒了),紧接着从被杀了的这个人的下一个人重新开始从1报数,和上面过程类似,报到M的人被杀,直到N个人全部被杀掉,请问,这个被杀的顺序是什么?

Input

给出两个正整数N、M

Output

输出被杀的顺序

Sample Input 1 

10 3

Sample Output 1

3 6 9 2 7 1 8 5 10 4

Hint

1<n<=10000

1<m<=100

早知道就直接递归了,还想着学了链表就用用,结果1个小时没想出来wok

#include <stdio.h>
#include <stdlib.h>
struct Node
{
	int data;
	struct Node* next;
};
struct Node* headnode()//创建头节点
{
	struct Node* headnode = (struct Node*)malloc(sizeof(struct Node));
	headnode->next = NULL;
	return headnode;
}
struct Node* chuang(int x)//创建新节点
{
	struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
	newnode->data = x;
	newnode->next = NULL;
	return newnode;
}
void weicha(struct Node* headnode, int data)//尾插
{
	struct Node* newnode = chuang(data);
	struct Node* teap = headnode;
	//printf("*%d*", teap->data);
	while (teap->next!=NULL)
	{
		teap = teap->next;
	}
	teap->next = newnode;
	//printf("&%d& ", teap->data);
}
void shan(struct Node* headnode, int M)//删除某一个元素
{
	struct Node* teap = headnode;
	struct Node* teap1 = teap->next;
	int sum=0;
	while (teap->next != NULL)
	{
	    teap = teap->next;
		teap1 = teap1->next;
		sum++;
		if (sum==M-1)
		{
			printf("%d ",teap1->data);
			teap->next = teap1->next;
			teap1 = teap1->next;
			sum=0;
		}
		if(teap->next==NULL)
		{
			teap=headnode;
			teap1=teap->next;
			//printf("头节点");
		}
		if(teap->next==NULL)
		{
			break;
		}
	}
}
void shuchu(struct Node* headnode)//输出
{
	struct Node* teap = headnode->next;
	while (teap!=NULL)
	{
		printf("%d ", teap->data);
		teap = teap->next;
	}
}
int main()
{
	int N,M;
	struct Node* list = headnode();
	scanf("%d%d",&N,&M);
	for(int i=1;i<=N;i++)
	{
		weicha(list,i);
	}
	shuchu(list);
	shan(list,M);
	shuchu(list);
}

太拉了(;´༎ຶД༎ຶ`) !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下 SQL 语句实现: ``` SELECT MAX(score) as max_score FROM ( SELECT MAX(score) as score FROM exam WHERE 学号 = 'xxx' AND 第一次考试成绩 > 60 UNION ALL SELECT MAX(score) as score FROM exam WHERE 学号 = 'xxx' AND 第二次考试成绩 > 60 UNION ALL SELECT MAX(score) as score FROM exam WHERE 学号 = 'xxx' AND 第三次考试成绩 > 60 ) as temp ``` 其中,`学号` 为需要查询的学号,`exam` 为考试成绩表,`第一次考试成绩`、`第二次考试成绩`、`第三次考试成绩` 为三次考核的成绩字段。 ### 回答2: 假设有一个名为"考试成绩"的表格,其中包含学号、第一次考试成绩、第二次考试成绩和第三次考试成绩的数据。那么根据题目要求,我们需要查询在三次考核中哪一次考核的最高分的分值最高。 我们可以按照以下步骤实现: 1. 使用SELECT语句从表格中选择学号和每次考试的最高分值,结合MAX函数和CASE语句进行条件判断。例如: ```sql SELECT 学号, CASE WHEN 第一次考试成绩 >= 60 AND 第一次考试成绩 >= 第二次考试成绩 AND 第一次考试成绩 >= 第三次考试成绩 THEN 第一次考试成绩 WHEN 第二次考试成绩 >= 60 AND 第二次考试成绩 >= 第一次考试成绩 AND 第二次考试成绩 >= 第三次考试成绩 THEN 第二次考试成绩 WHEN 第三次考试成绩 >= 60 AND 第三次考试成绩 >= 第一次考试成绩 AND 第三次考试成绩 >= 第二次考试成绩 THEN 第三次考试成绩 END AS 最高分值 FROM 考试成绩; ``` 2. 使用ORDER BY语句按最高分值降序排列,以便找到最高分值最高的考核。例如: ```sql SELECT 学号, CASE WHEN 第一次考试成绩 >= 60 AND 第一次考试成绩 >= 第二次考试成绩 AND 第一次考试成绩 >= 第三次考试成绩 THEN 第一次考试成绩 WHEN 第二次考试成绩 >= 60 AND 第二次考试成绩 >= 第一次考试成绩 AND 第二次考试成绩 >= 第三次考试成绩 THEN 第二次考试成绩 WHEN 第三次考试成绩 >= 60 AND 第三次考试成绩 >= 第一次考试成绩 AND 第三次考试成绩 >= 第二次考试成绩 THEN 第三次考试成绩 END AS 最高分值 FROM 考试成绩 ORDER BY 最高分值 DESC; ``` 这样,我们就能够查询到在三次考核中最高分值最高的考核。查询结果中的学号和最高分值即为答案。 ### 回答3: 要查询三次考核中最高的那一次考核的最高分值,可以使用以下 SQL 语句: ``` SELECT MAX(考试成绩) AS 最高分值 FROM ( SELECT 学号, MAX(第一次考试成绩) AS 考试成绩 FROM 表名 GROUP BY 学号 UNION SELECT 学号, MAX(第二次考试成绩) AS 考试成绩 FROM 表名 GROUP BY 学号 UNION SELECT 学号, MAX(第三次考试成绩) AS 考试成绩 FROM 表名 GROUP BY 学号 ) AS 考试分数 WHERE 考试分数.考试成绩 > 60; ``` 以上 SQL 语句的步骤是: 1. 先针对每个学生分别计算出三次考核中的最高分,使用 UNION 将结果合并为一张虚拟表; 2. 在虚拟表中筛选出考试成绩超过60分的记录; 3. 在筛选结果中找出最高分值。 请注意将表名替换为实际的表名,并根据实际需求修改字段名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值