原题的意思是给定一个指定长度的数组,然后接受一个数字m,将原数组前m位移动到最后,且顺序不变。

看到这个题,想到的第一个方法就是在用一个数组来储存改变后的数字,代码如下

 int func(){
int i,j,n;
int b[];     //定义一个新数组用来储存改变后的数字
int a[]={,,,,,,,,,};
printf("请输入要后移的位数");
scanf("%d",&n);
for(i=n,j=;i<;i++,j++) //把原数组n位后的数放到新数组最前面
b[j]=a[i];
for(i=;i<n;i++,j++) //将原数组前n位接着放到新数组中
b[j]=a[i];
for(i=;i<;i++)
{
printf("%d ",b[i]);
}
return ;

然后看题意好像是不允许用另外一个数组,接着就有了下一种思路,每次把原数组最后一个数放到最前面,循环数组长度(len)-n次,代码如下:

 void func()
{
int temp,i,j,n;
int a[]={,,,,,,,,,};
printf("\n请输入后移的位数");
scanf("%d",&n);
n=-n;
for(i=;i<n;i++) //循环n次把原数组后n位放到最前
{
j=;
temp=a[j]; //每次记录原数组最后一个数字
for(;j>;j--)
{
a[j]=a[j-]; //把整个数组后移一位
}
a[j]=temp; //把最后一个数放到最前
}
for(i=;i<;i++)
{
printf("%d ",a[i]);
}
}

这样一个程序感觉看的很头疼,然后自己就在网上又找到了一种''偷懒''的方法,  这种方法的思路是只按后移之后的顺序输出原数组,代码如下:

 void func()
{
int i,k,n;
int a[]={,,,,,,,,,};
printf("\n输入后移的位数");
scanf("%d",&n);
for(i=;i<;i++)
{
k=(i+n)%;     //求后移之后的下标
printf("%d ",a[k]); //直接输出该数字
}
}

感觉这个题的解决方法很多,然后就又在搜了下,又找到了一种方法,这种方法的思路是先分别将m位之前和之后的数字反转,最后将整个数组反转,代码贴下:

 void fun()
{
int i,j,n,temp;
int a[]={,,,,,,,,,};
printf("\n请输入后移的位数");
scanf("%d",&n);
for(i=,j=n-;i<n/;i++,j--) //将n位之前的数字反转
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=n,j=;i<(n+)/;i++,j--) //将n位之后的数字反转
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=,j=;i<;i++,j--) //将整个数组反转
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
/*上面这三个循环可以写成一个函数*/
for(i=;i<;i++)
{
printf("%d ",a[i]);
} }

今天就先写这四种方法,能找到其他的还会继续添加,如果大家有什么比较好的方法,也可以交流下。

给定一列数字将其平移n位的更多相关文章

  1. 验证abc三列数字符合我的小弟要求

    需求好像是: 1.第一列数据有重复的找出来,并且找出它的重复位置 2.第三列根据第一列得出的位置,取出相应位置的数据进行相加 3.相加的结果 是否等同于第二列的对应位置数据 <!DOCTYPE ...

  2. 求矩阵中各列数字的和 Exercise08_01

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年12月 * 题目:求矩阵中各列数字的和 * */ public class Exercise ...

  3. 在EXCEL中如何让一列数字变成文本格式?就是想让单元格的左上角变一个绿绿的?

    如何在EXCEL中如何让一列数字变成文本格式?就是想让单元格的左上角变一个绿绿的? 解决方案:将整列单元格格式设为文本,然后,选中该列,数据--分列--完成 详细步骤: (1)选中1行或者1列,再单击 ...

  4. 给定n个数字,问能否使这些数字相加得到h【折半查找/DFS】

    A Math game Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Submit ...

  5. 控制input标签中只能输入数字以及小数点后两位

    js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { ...

  6. 加密传输:每位数字+6,然后用除以9的余数代替该数字, 在把第一位和第四位交换,第二位和第三位交换,例如3276->3840

    /** * @author:(LiberHome) * @date:Created in 2019/3/6 10:00 * @description: * @version:$ */ /*今日目标:5 ...

  7. input输入框只能输入数字和 小数点后两位

    //input输入框只能输入数字和 小数点后两位 function num(obj,val){ obj.value = obj.value.replace(/[^\d.]/g,"" ...

  8. wps直接打开CVS文件会把长串数字订单号最后4位变为0

    WPS打开CVS文件,发现里面的长串数字订单号后4位全变成0了,而且是以科学计数法来显示了 上网查了下,不能直接打开,得先在WPS(OFFICE中也一样)中新建一个空白表格,然后用菜单里的数据导入功能 ...

  9. 《剑指offer》第四十四题(数字序列中某一位的数字)

    // 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1, ...

随机推荐

  1. [zhuan]Dalvik 分析 - Class加载篇

    http://blog.csdn.net/zhangyun438/article/details/17192787 内容如下: Java 源代码经过编译后会生成后缀为class的文件,也即字节码文件. ...

  2. @RequestParam 注解的使用

    @RequestParam 注解的使用 前言 在SpringMvc后台进行获取数据,一般是两种. 1.request.getParameter(“参数名”) 2.用@RequestParam注解获取 ...

  3. caffe中使用crop_size剪裁训练图片

    layer { name: "data" type: "Data" top: "data" top: "label" i ...

  4. python练习:抓取统计log内ip数量

    #!/usr/bin/python #-*- coding: utf- -*- import os import re rawfile = '/var/log/auth.log' def rawpar ...

  5. JSX 的基本语法规则

    JSX 的基本语法规则:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析:遇到代码块(以 { 开头),就用 JavaScript 规则解析

  6. ConvexScore

    题目描述 You are given N points (xi,yi) located on a two-dimensional plane. Consider a subset S of the N ...

  7. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

  8. C#编写程序监测某个文件夹内是否有文件进行了增,删,改的动作?

    新建一个Console应用程序,项目名称为“FileSystemWatcher”,Copy代码进,编译后就可以用了.代码如下: using System; using System.Collectio ...

  9. Android中TextView设置字体

    最近项目中出现把字体设置成宋体,微软雅黑,黑体,楷体等的需求; 度娘发现Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使 ...

  10. 【shell】shell编程(六)-shell函数的应用

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; [return ...