社区
C语言
帖子详情
考一个比较经典的问题(2)
zjxiaoyu
2005-07-13 05:12:44
将n个元素的数组向左旋转i个位置(循环旋转)。
比如abcdefg向左旋转3个位置就是defgabc。
写简单的代码实现。
...全文
664
21
打赏
收藏
考一个比较经典的问题(2)
将n个元素的数组向左旋转i个位置(循环旋转)。 比如abcdefg向左旋转3个位置就是defgabc。 写简单的代码实现。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
netfloator
2005-07-14
打赏
举报
回复
这道题如果用到临时空间就太简单了,题目也失去了意义。我在学数据结构的时候看到过这道题。
Willpro
2005-07-14
打赏
举报
回复
www.mark.com
boxban
2005-07-14
打赏
举报
回复
前面各位大虾作得都不错,但个别有些小纰漏:
1。memcpy/memmove 里面的数量是以“字节”为单位计算的,因此对于int类型,应该是元素数目*sizeof(int)
2。应该考虑i > n 的情形,因此在处理前需做一个简单的检查:i %= n; if (i > 0) ....
jixingzhong
2005-07-14
打赏
举报
回复
或者用楼主的办法::
char a[100]; //100 is the max len!!
inverse(int p,int q);
{
//a[p] 到 a[q] 逆向
}
main()
{
int i,n; //输入N(字符串的长度),I(定位)
//加入输入字符串语句
inverse(0, i-1);
inverse(i, n-1);
inverse(0, n-1);
//输出!!
}
jixingzhong
2005-07-14
打赏
举报
回复
void recl(int *c,int n,int i)//c这数组,n为数组大小,i为起始位置
{
int *buf = new int[n];
memmove(buf,c+i,n-i);
memmove(buf+n-i,c,i);
memmove(c,buf,n);
delete[] buf;
return;
}
呵呵 ,原理是一样的。
RoninBlade
2005-07-14
打赏
举报
回复
不怎么会c语言。
如果可以使用copy的话,不如把给定的数据串复制一个一样的 "abcde" + "abcde"
移动几位,就从第几位开始取子串。
zjxiaoyu
2005-07-14
打赏
举报
回复
讨论的差不多了。欢迎进入下一个话题
http://community.csdn.net/Expert/topic/4144/4144339.xml?temp=.2981989
(附:上一个话题。 ;-)
http://community.csdn.net/Expert/topic/4142/4142186.xml?temp=.5108454
)
zjxiaoyu
2005-07-14
打赏
举报
回复
我开这个帖子的愿意原意是:用memcpy反复移的方法,中间内存要求比较高。而用1个中间变量反复循环写的方式那些边界调起来很繁琐,不够清晰。而那个3次转置的代码写起来就非常清晰,用书上的话说就是“想出错都难”,而且执行效率跟前面的差不多。
况且,如果要扩展的话,这种方法在将向量abc转换成为cba时,或者更长的时候,特别有效。
hackingtruth
2005-07-14
打赏
举报
回复
学习
spyol
2005-07-14
打赏
举报
回复
受教了~
K
2005-07-13
打赏
举报
回复
学习中
迷你苑
2005-07-13
打赏
举报
回复
学习中
wq_princess
2005-07-13
打赏
举报
回复
void left_cycle( char *d, int num )
{
int i, j;
char temp;
int len = 0;
while( d[len] != '\0' )
len ++;
for( i = 0; i < num; i ++ )
{
temp = d[0];
for( j = 0; j < len - 1; j ++ )
{
d[j] = d[j+1];
}
d[j] = temp;
}
}
whatsouta
2005-07-13
打赏
举报
回复
用
malloc
char *a = (char *)malloc(sizeof(char)*n);
if (a == NULL) exit(1); //用之前最好检查一下有没有申请内存成功
...
...
free(a);
aiguozhou
2005-07-13
打赏
举报
回复
我是新手,请问如果用C语言写的话,也能象上面各位大哥说的这样
char *b=new char[n];
new 一个新的数组么??
shizhen
2005-07-13
打赏
举报
回复
icansaymyabc(学习与进步)
做得漂亮:)
FBIq
2005-07-13
打赏
举报
回复
#define N 10
void main(void)
{
char a[N]="risdfght",temp[N];
int i=0,j,n;
printf("转之前%s\n",a);
printf("到转几位(1~4)");
scanf("%d",&n);
for(j=strlen(a)-n;a[j]!=0;j++)
temp[i++]=a[j];
for(j=0;j<strlen(a)-n;j++)
temp[i++]=a[j];
temp[i]=0;
printf("\n转之后%s",temp);
getch();
return;
}
icansaymyabc
2005-07-13
打赏
举报
回复
void lrota(char *a,int n,int i)
{
char *b=new char[n];
strncpy(b,a,n);
for(int j=0;j<n;j++) a[j]=b[(j+i)%n];
delete []b;
}
int main(int argc, char* argv[])
{
char buf[]={"abcdefghijklmn"};
printf("%s\n",buf);
lrota(buf,sizeof(buf)-1,3);
printf("%s\n",buf);
return 0;
}
zjxiaoyu
2005-07-13
打赏
举报
回复
这种方法在将向量abc转换成为cba时,特别有效。
zjxiaoyu
2005-07-13
打赏
举报
回复
哦。不错。有了memcpy确实比自己实现循环简单多了。
那个,书上说了另外一种方法。就是:
比如前i个元素通称为向量a,后面的称为b。a先自己反转,就是第一个元素放最后,第二个放倒数第二。然后b自己反转。最后整个大数组再反转一次。
就是
inverse(0, i-1);
inverse(i, n-1);
inverse(0, n-1);
加载更多回复(1)
五大基本算法及其
经典
问题
五大常用算法之一:分治算法
经典
问题
: 1.二分搜索 2.大整数乘法 3.Strassen矩阵乘法 4.棋盘覆盖 5.合并排序 6.快速排序 7.线性时间选择 8.最接近点对
问题
9.循环赛日程表 10.汉诺塔 五大常用算法之二:动态规划算法
经典
问题
: 1.最短路径
问题
2.投资分配
问题
3.背包
问题
4.最长公共子序列 5.最长公共子串 6.最长递增子序列 五大常用算法之三:贪心算法 1.硬币找零
问题
2.活动选择
问题
3.背包
问题
4.多机调度
问题
5.小船过河
问题
6.分发饼干
问题
7.跳跃游戏
问题
【
经典
问题
】括号匹配
问题
文章目录前言例题算法思想算法举例代码栈类括号匹配核心算法完整代码运行结果 前言 括号匹配
问题
算是栈应用中
比较
经典
的
问题
了,在数据结构的书中还有各种
考
试中会出现。最近刷题的时候也遇到了,就想写一篇文章整理一下。 例题 题目来自Leetcode中国 给定
一个
只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足: 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的...
stm32
经典
笔试题_嵌入式面试的30道
经典
问题
!
今天为大家准备了嵌入式工程师面试经常遇到的30个
经典
问题
,希望可以帮助大家提前准备,不再惧怕面试。基础
问题
1讲一下stm32的时钟系统2C语言中堆和栈的区别;推挽输出是什么?3假如
一个
单片机上电之后不运行?这是为什么?4举你用过的单片机的型号和它的一些主要参数5
一个
温度传感器模块,按照正确的使用方式和参数指标,对人体皮肤测量之后,得到的温度一直都是35摄氏度,这是为什么?6
考
一些结构体、联合体、s...
小学奥数平均数
经典
问题
汇总
小学奥数平均数
经典
问题
汇总,掌握这些平均数
问题
,小学奥数
考
试拿高分不是梦!
动态规划
问题
经典
例题
DP(Dynamic Programming)定义: 动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。在将大
问题
化解为小
问题
的分治过程中,保存对这些小
问题
已经处理好的结果,并供后面处理更大规模的
问题
时直接使用这些结果。 动态规划具备了以下三个特点: 把原来的
问题
分解成了几个相似的子
问题
。 所有的子
问题
都只需要解决一次。 储存子
问题
的解 动态规划的本质,是对
问题
状态的定义和状态转移方程的定义(状态以及状态
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章