首页 > 其他分享 >C语言解题 || 调整数列

C语言解题 || 调整数列

时间:2024-02-07 18:32:22浏览次数:29  
标签:数列 int C语言 ++ 解题 input include tem

题目:

有n个整数,使其前面各数顺序向后移m个位置,移出的数再从头移入,使得最后m个数变成前面m个数。

例:设n为6, m为2,当n个数为{1,2,3,4,5,6},函数使之变为{5,6,1,2,3,4}

编写一个函数move,实现以上功能,该函数的声明如下:

void move(int *x,int n, int m)

实现思想:

  1. 拿出最后一个数,然后其他数字全部后移1位
  2. 把之前拿出的数,放在空出来的最前面(其实不是空的,但这个位置可以被覆盖)

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <malloc.h>
#include <errno.h>

void Move(int* p, int n, int m)
{
	int i = 0;
	int j = 0;
	int tem = 0;

	//如果m大于2,那么其实只有溢出来的部分使有意义的
	//比如只有数列只有3位,要求排序4位
	//那其实效果是 == 排序1位的
	m %= n;

	//循环m次,即排序m位
	for (j = 0; j < m; j++)
	{
		tem = *(p + n - 1);//取出最后一位

		//其余数字后移1位
		for (i = n - 1; i >= 0; i--)//此时数组中最后一位已经拿走,所以循环n-1次
		{
			*(p + i) = *(p + i - 1);
		}

		*p = tem;//把之前拿出的数,放在最前面
	}
}

int main()
{
	int* p = NULL;
	int input_n = 0;
	int input_m = 0;
	int i = 0;

	printf("请输入n与m:");
	scanf("%d %d", &input_n, &input_m);

	//开辟input个空间 用来存放inout个整型
	p = (int*)calloc(input_n, sizeof(int));

	if (p == NULL)
	{
		perror("calloc");
		return 1;
	}

	//输入数列
	printf("请输入数列:");
	for (i = 0; i < input_n; i++)
	{
		scanf("%d", p + i);
	}


	//处理
	Move(p, input_n, input_m);

	//输出
	for (i = 0; i < input_n; i++)
	{
		printf("%d ", *(p + i));
	}

	free(p);
	p = NULL;

	return 0;
}

运行结果:

C语言解题 || 调整数列_#include

标签:数列,int,C语言,++,解题,input,include,tem
From: https://blog.51cto.com/u_16509575/9639433

相关文章

  • C语言解题 || 计算数字矩阵的2条对角线之和
    题目:写一个函数calc_matrix(intn)实现如下功能:先输入整数n,然后输入nn个整数,构成nn矩阵,计算对角线上的数之和,并输出该和。例如:先输入3,然后输入1,2,3,4,5,6,7,8,9对角线上是数之和为:1+5+9+3+7=25。写出完整的程序代码,在main函数中调用上述函数calc_matrix题目分析:通过研究数......
  • 简单的斐波那契数列通过chan实现生产者消费者模型
    1.实现斐波拉契数列写一个函数返回长度为n的斐波拉契slice数组funcfi(nint)[]int{ ifn<=0{ return[]int{} } fibs:=make([]int,n) fibs[0]=0 ifn>1{ fibs[1]=1 fori:=2;i<n;i++{ fibs[i]=fibs[i-1]+fibs[i-2] } } returnfibs}......
  • 牛牛的等差数列(树状数组,区间加等差数列、区间求和)
    https://ac.nowcoder.com/acm/contest/5157/C区间加等差数列,区间求和树状数组,二阶差分\(b_i=a_i-a_{i-1}\)\(c_i=b_i-b_{i-1}\)\[\sum_{i=1}^na_i=\sum_{i=1}^n\sum_{j=1}^ib_j=\sum_{i=1}^n\sum_{j=1}^i\sum_{k=1}^jc_k\\=\sum_{k=1}^nc_k\sum_{i,j}[k\......
  • 探索C语言结构体:编程中的利器与艺术
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 探索C语言结构体:编程中的利器与艺术
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • (C语言)代码学习||2024.2.6||题目是codewars上的【 IP Validation】
    C语言#sscanf#代码学习#codewars题目链接:IPValidation|Codewars代码如下:#include<stdio.h>intis_valid_ip(constchar*addr){unsignedn[4],i,nc;//Mustbe4integersseparatedbydots:if(sscanf(addr,"%d.%d.%d.%d%n",&n[0],&n......
  • C语言解题 || 箭型图案
    题目:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*"组成的箭形图案。输入描述:本题多组输入,每行个整数(2~20)。输出描述:针对每行输入,输出用“”组成的箭形。代码实现:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intinput=......
  • C语言解题 || 公务员面试
    题目:公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最分和一个最低分,输出每组的平均成绩。(注:本题有多组输入)输入描述:每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。输出描述:每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位......
  • C语言学习12
    函数的递归例子此程序只能倒着打印,是不行的函数的递归,先递后归补充知识点:例子不创建临时变量输出字符串长度但是所以递归思想题目:正解疑问:......
  • C语言解题 || 小乐乐与欧几里得
    题目:小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。输入描述:每组输入包含两个正整数n和m。(1≤n≤109,1≤m≤109)输出描述:对于每组输入,输出一个正整数,为n和m的最大公约数......