编程问题,这道题不是说要线性循环的时间复杂度度吗?为什么用C写用了两个for循环还是可以通过

C数据结构编程。求时间复杂度的问题,用大O表示法描述下列程序段的时间复杂度,一共四小题,跪求!_百度知道c语言基础(6)
昨天,也就是日晚上19:00~20:30,这是今年CVTE春招的网测时间,博主没能赶上时间,从舍友里摘取了面试安卓开发的两道网测编程题,在这里,博主要用c语言来实现它。
第一道题:字符数组的循环右移问题
题目要求:将N个字符的数组,循环右移K位。时间复杂度O(N)。
思路分析:1、含N个字符的数组;2、字符数组循环右移k位;3、时间复杂度为O(N)。我们应该看得出,有两种情况:1、k小于N;2、k大于等于N,我们不难得出,当k大于等于N时,与用N除k得出的余数y(此时,y小于N)的右移效果相同,所以,我们可以将k转化为k小于N的情况来求右移k位的字符数组。从时间复杂度上看出,我们不能用关于N的嵌套循环。由此,博主写出了下列代码:
void rightstep(char *str,int step)
int i,length,
char pt[10];
length = strlen(str);
printf("原字符串为:");
for(i = 0;i & length;i++)
putchar(str[i]);
printf("\n");
count = step % length;
for(i = 0;i & length;i++)
pt[(i + count) % length] = str[i];
pt[length] = '\0';
printf("移动了%d位的数组为:",step);
for(i = 0;i & length;i++)
putchar(pt[i]);
printf("\n");
第二道题:字符串去重问题
题目要求:删除小写字母字符串中重复字符。如果可以,优先删除重复字符中排在比他小字符前面的字符。 比如,输入:bbcacdww;输出:bacdw
思路分析:删除字符串中的重复字符,题目还说:如果可以,优先删除重复字符中排在比他小字符前面的字符。所以,我们不妨凡是重复字符,就删除前面的重复字符,保留后面的重复字符。下面是博主用c语言实现的代码:
void quchong(char *str)
int i,j,length,k = 0,tf = 0,m = 0;
int in[10];
char pt[10];
length = strlen(str);
printf("原字符串为:");
for(i = 0;i &i++)
putchar(str[i]);
printf("\n");
for(i = length - 1;i & 0;i--)
for(j = i - 1;j &= 0;j--)
if(str[i] == str[j])
printf("去重后的字符串为:");
for(i = 0;i &i++)
for(j = 0;j &j++)
if(in[j] == i)
pt[m] = str[i];
for(i = 0;i &i++)
putchar(pt[i]);
printf("\n");
我知道,以上两道CVTE网测编程题博主解的答案不是最优的,但也是实现了题目要求的功能,况且网测是没有那么多时间去优化代码,从这两道网侧踢,博主知道了学习c语言基础稍微不扎实,解答时容易错漏百出,也就是在c编译器上不断纠正。下面是我在vc++6.0上编译运行上述代码(包括我以上全部的驱动程序):
#include&stdio.h&
#include&string.h&
void rightstep(char *str,int step);
void quchong(char *str);
int get_int(void);
int main(void)
char *s = "bbcacdww";
printf("字符串为:");
printf("%s\n",s);
step = get_int();
rightstep(s,step);
quchong(s);
void rightstep(char *str,int step)
int i,length,
char pt[10];
length = strlen(str);
printf("原字符串为:");
for(i = 0;i &i++)
putchar(str[i]);
printf("\n");
count = step %
for(i = 0;i &i++)
pt[(i + count) % length] = str[i];
pt[length] = '\0';
printf("移动了%d位的数组为:",step);
for(i = 0;i &i++)
putchar(pt[i]);
printf("\n");
void quchong(char *str)
int i,j,length,k = 0,tf = 0,m = 0;
int in[10];
char pt[10];
length = strlen(str);
printf("原字符串为:");
for(i = 0;i &i++)
putchar(str[i]);
printf("\n");
for(i = length - 1;i & 0;i--)
for(j = i - 1;j &= 0;j--)
if(str[i] == str[j])
printf("去重后的字符串为:");
for(i = 0;i &i++)
for(j = 0;j &j++)
if(in[j] == i)
pt[m] = str[i];
for(i = 0;i &i++)
putchar(pt[i]);
printf("\n");
int get_int(void)
printf("请您输入字符串右移的位数:");
while(scanf("%d",&in) != 1)
printf("请您重新输入字符串右移的位数:");
while(getchar() != '\n')
运行结果截图:
在这里谢谢各位读者的阅览,如有比较优的解答代码,也希望各位读者提出来,谢谢了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5068次
排名:千里之外
原创:37篇
(5)(4)(1)(1)(9)(4)(4)(9)(2)数据结构 算法设计题 有一个学生成绩线性表,用顺序存储方式进行存储,请编写一个时间复杂度较小的算法,_百度知道【编程语言】如和用C语言求解一般线性规划问题?_科技_易房网
如和用C语言求解一般线性规划问题?
作者:admin
非整数线性规划 易房网小编为您精选了网友的解决办法,供您参考 ----------------------------------------------------- 网友回答: http://www.easyfang.
非整数线性规划易房网小编为您精选了网友的解决办法,供您参考-----------------------------------------------------网友回答:
易房网小编为您精选了网友的解决办法,供您参考-----------------------------------------------------网友回答:
只是想找个求解LP的计算器就用GLPK吧,别自己造轮子了……想造轮子的话学一下单纯形算法然后去写。觉得不过瘾上内点法。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将
追究责任;3.作者投稿可能会经我们编辑修改或补充。
52岁女医生离世:把能用的器官都捐了 曾拜托同学捐
众星面对安检也得乖乖配合,李易峰生无可恋
几十元小旅馆携程卖358 记者报道后连夜改价
秋天不能露肩?宋佳偏偏穿得时髦又显瘦!
景区上百游客遭群蜂攻击 多人全身疼痛不已哭声一
学区房涨90万 房主反悔:愿支付双倍违约金
网曝7名学生教室殴打老师 老师始终没有还手
美国总统大聚会,各自心里是什么感觉?
友情链接、商务合作QQ:

我要回帖

更多关于 线性查找时间复杂度 的文章

 

随机推荐