给定一列数字将其平移n位
原题的意思是给定一个指定长度的数组,然后接受一个数字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位的更多相关文章
- 验证abc三列数字符合我的小弟要求
需求好像是: 1.第一列数据有重复的找出来,并且找出它的重复位置 2.第三列根据第一列得出的位置,取出相应位置的数据进行相加 3.相加的结果 是否等同于第二列的对应位置数据 <!DOCTYPE ...
- 求矩阵中各列数字的和 Exercise08_01
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年12月 * 题目:求矩阵中各列数字的和 * */ public class Exercise ...
- 在EXCEL中如何让一列数字变成文本格式?就是想让单元格的左上角变一个绿绿的?
如何在EXCEL中如何让一列数字变成文本格式?就是想让单元格的左上角变一个绿绿的? 解决方案:将整列单元格格式设为文本,然后,选中该列,数据--分列--完成 详细步骤: (1)选中1行或者1列,再单击 ...
- 给定n个数字,问能否使这些数字相加得到h【折半查找/DFS】
A Math game Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Submit ...
- 控制input标签中只能输入数字以及小数点后两位
js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { ...
- 加密传输:每位数字+6,然后用除以9的余数代替该数字, 在把第一位和第四位交换,第二位和第三位交换,例如3276->3840
/** * @author:(LiberHome) * @date:Created in 2019/3/6 10:00 * @description: * @version:$ */ /*今日目标:5 ...
- input输入框只能输入数字和 小数点后两位
//input输入框只能输入数字和 小数点后两位 function num(obj,val){ obj.value = obj.value.replace(/[^\d.]/g,"" ...
- wps直接打开CVS文件会把长串数字订单号最后4位变为0
WPS打开CVS文件,发现里面的长串数字订单号后4位全变成0了,而且是以科学计数法来显示了 上网查了下,不能直接打开,得先在WPS(OFFICE中也一样)中新建一个空白表格,然后用菜单里的数据导入功能 ...
- 《剑指offer》第四十四题(数字序列中某一位的数字)
// 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1, ...
随机推荐
- 《时间序列分析及应用:R语言》读书笔记--第二章 基本概念
本章介绍时间序列中的基本概念.特别地,介绍随机过程.均值.方差.协方差函数.平稳过程和自相关函数等概念. 2.1时间序列与随机过程 关于随机过程的定义,本科上过相关课程,用的是<应用随机过程&g ...
- linux环境下,接着lnmp,安装redis
linux环境下,安装redis 操作记录: 回到家目录 cd ~查看 ls进入 lump cd lnmp1.3-fullls??? sudo ./addons.sh //---进入后选 ...
- php 生成压缩文件
$fileList = array( "site_upload/form_file_clause_extend/20180224/1519456901_1481718257.jpg" ...
- 编译skia静态库时,图片解码库无法注册的问题
转载:http://www.cnblogs.com/imlucky/archive/2012/08/01/2617851.html 今天编译skia库,增加图片解码库时总是无效.按照此博客的方法修改后 ...
- 大道至简第一章伪代码读后感o(╯□╰)o
import.java.io*; import class duhougan; public static void main(Striing arges[]){ system.out.println ...
- [技巧篇]14.据说SSH框架需要的监听器,IntrospectorCleanupListener
开发这么久,我也没有使用过IntrospectorCleanupListener监听器,今天偶尔看到一篇文章,虽然没有怎么读懂,也不太理解,但是好像给官方提供一些解释!给自己留一个备注,多点东西因为没 ...
- PostHtml 中的一些有用的插件
记录一下 PostHtml 中的一些比较有用的插件 参考自PostHtml文档 posthtml-pug 将pug转化成html posthtml-md 将md语法转化为html语法 posthtml ...
- zoj 1729 Hidden Password
Hidden Passwordhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Time Limit: 2 Seconds ...
- [洛谷P2491] [SDOI2011]消防
洛谷题目链接:[SDOI2011]消防 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超 ...
- Flume 入门--几种不同的Sinks
主要介绍几种常见Flume的Sink--汇聚点 1.Logger Sink 记录INFO级别的日志,一般用于调试.前面介绍Source时候用到的Sink都是这个类型的Sink 必须配置的属性: 属性说 ...