给定一列数字将其平移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, ...
随机推荐
- NOIP2017 列队——平衡树
平衡树蒟蒻,敲了半天. 其实思路很简单,就是把许多个人合并成一个区间.必要的时候再拆开.(是不是和这个题的动态开点线段树有异曲同工之妙?) 每次操作最多多出来6个点. 理论上时间复杂度是nlogn,空 ...
- HDU1394 逆序数
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 神经网络CNN训练心得--调参经验
1.样本要随机化,防止大数据淹没小数据 2.样本要做归一化.关于归一化的好处请参考:为何需要归一化处理3.激活函数要视样本输入选择(多层神经网络一般使用relu)4.mini batch很重要,几百是 ...
- 数据结构:Treap
关于重量平衡树的相关概念可以参考姊妹文章:重量平衡树之替罪羊树 Treap是依靠旋转来维护平衡的重量平衡树中最为好写的一中,因为它的旋转不是LL就是RR 对于每一个新的节点,它给这个节点分配了一个随机 ...
- SourceTree for mac 注册过程(v2.7.6a)
背景 为啥要自己注册呢,往上一堆一堆的老版本许可证偏不用,就愿意定制自己的账号style. 搞了半天,还是觉得pycharm自带的git工具就挺好用了,闲的没事记录一下. 要点 百度搜索的地址可以进入 ...
- 知问前端——Ajax表单插件
传统的表单提交,需要多次跳转页面,极大的消耗资源也缺乏良好的用户体验.而这款form.js表单的Ajax提交插件将解决这个问题. 一.核心方法 官方网站:http://malsup.com/jquer ...
- 从无到有搭建SSM框架
框架 https://www.cnblogs.com/xiaoL/p/7753130.html log4j配置详解 https://www.cnblogs.com/SummerinShire ...
- 【BZOJ4837】LRU算法 [模拟]
LRU算法 Time Limit: 6 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 小Q同学在学习操作系统中内存管理的 ...
- java分页通用篇
一.创建分页通用类 package com.dkyw.util; import java.util.List; public class Page<T> { private int tot ...
- 所有和Java中代理有关的知识点都在这了。
对于每一个Java开发来说,代理这个词或多或少都会听说过.你可能听到过的有代理模式.动态代理.反向代理等.那么,到底什么是代理,这么多代理又有什么区别呢.本文就来简要分析一下. 代理技术,其实不只是J ...