G. 实验7_24_数列复原

本文详细解析了一种独特的数列重构算法,该算法通过特定规则从原始数列中逐个移除元素并重新排列剩余元素,最终求得原始数列。以实例说明了算法的具体实现过程,包括输入整数n,输出原始数列,并提供了完整的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有n个整数组成的数列(这n个整数互不相同,取值为1-n),原始数列中第一个数字是1,将1删除后把其后的两个数字放到数列的末尾,这时排在数列开头的数字是2,将2删除,取其后的两个数字放到数列的末尾,这时数列的开头是3,依次类推,直到把数列中所有的数字删除。如果剩下的数不足两个,那么就取一个数。
例如原始数列为“1 5 3 2 4”:
将1删除后,把其后的两个数字放到数列的末尾:2 4 5 3
将2删除后,把其后的两个数字放到数列的末尾:3 4 5
将3删除后,把其后的两个数字放到数列的末尾:4 5
将4删除后,把其后的两个数字放到数列的末尾:5
将5删除后,数列变为空。
你的任务是已知n,求出原始数列。比如上述数列,已知n=5,那么就要求出数列“1 5 3 2 4”。
输入与输出要求:首先输入1个整数n,n代表连续整数的个数。n的范围是1—200。输出n个整数,即原始数列。每个整数用空格分开,最后一个整数后是换行符。
程序运行效果:
Sample 1:
7↙
1 7 5 2 4 6 3
Sample 2:
20↙
1 12 8 2 15 17 3 9 13 4 19 10 5 16 14 6 11 20 7 18

菜鸡之路

#include<stdio.h>
#include<string.h>
int main()
{
	int n;
	scanf("%d",&n);
	int number[n+1];
	for(int i=1;i<=n;i++)
	{
		number[i]=i;
	}
	int cnt=0;
	int exc1,exc2;
	for(int k=0;k<n-2;)
	{
		cnt=0;
		exc1=number[n];
		exc2=number[n-1];
		for(int j=n-2;n-2-cnt>n-2-k;j--)
		{
			number[n-cnt]=number[n-2-cnt];	
			cnt++;
		}
		k++;
		number[n-cnt]=exc1;
		number[n-cnt-1]=exc2;
	}
	for(int i=1;i<=n;i++)
	{
		printf("%d ",number[i]);
	}
	return 0;
}
思路为将过程在纸上完全表示出来
1 2 3 4 5 6 7
1 2 3 4 6 7 5
1 2 3 7 5 4 6
1 2 4 6 3 7 5 
1 7 5 2 4 6 3 的过程,即为将最后两个数向前几位插入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值