我想问一下我这个c语言程序为什么运行超时!需要怎么样修改呢?

作者&投稿:郦达 (若有异议请与网页底部的电邮联系)
c语言二分法程序如下,结果好像没问题,但提交系统总是说超时!谁能帮着修改一下,谢谢。~

我看了一下,好像你的算法思路不怎么对,我把排序和二分法查找给出
for(j=0;j<=n-2;j++)
for(i=j+1;i<=n-2;i++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
} //排序结束 其实排序很多种方法,我喜欢这种

l=n-1;//l代表末标,s代表首标
s=0;
if(ma[l])
printf("不在这个区间
1");
else
{
while(l!=s)
{
mid=(l-s)/2;
if(m==a[mid])
{
printf("第%d个数是
",mid+1);
break;
}
if((l-s)==1&&m!=a[l]&&m!=a[s])
{
printf("没有符合的
");
break;
}
if(m>a[mid]) //在后面一半中
s=mid;
else // 在前面一半中
l=mid;
}
}

按照操作系统中的说法,它给每一个进程都设定了时间的上限,超过一定的时间后就会报错,所以,可能是你写的程序里面算法使用的循环次数太多,或者是你的代码里面出现一些因为打字错误而导致的死循环(我以前经常犯这种错误)。总之,仔细检查你的代码,兴许可以发现错哪儿了。

#include<stdio.h>
#include<stdlib.h>
/*
  Name: 
  Copyright: 
  Author: 
  Date: 28/01/14 21:12
  Description: 
有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和,
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。
输入格式
第一行2个整数n,m。
接下来一行n个整数表示n个格子的初始权值。
接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。
输出格式
有若干行,行数等于p=2或3的操作总数。
每行1个整数,对应了每个p=2或3操作的结果。
样例输入
4 3
1 2 3 4
2 1 3
1 4 3
3 1 4
样例输出
6
3
数据规模与约定
对于20%的数据n <= 100,m <= 200。
对于50%的数据n <= 5000,m <= 5000。
对于100%的数据1 <= n <= 100000,m <= 100000,0 <= 格子权值 <= 10000。
*/

typedef struct m0
{
int p;
int x;
int y;
}h;

int main()
{
int n,m,i,*q=NULL,j,sum;
h *mm=NULL;
printf(" 输入第一组参数:n m 
 \
n 表示 有多少个数据 
 \
m 表示接下来m行的输入参数p x y 。
");
 
scanf("%d %d",&n,&m);
q=(int *)malloc(sizeof(int)*n);//hanson--为初始数据分配单元 
if( q==NULL){
printf("memory allocate error.
");
}
//加入判断 
mm=(h*)malloc(sizeof(h)*m);//hanson--为m行的输入数据分配单元
//加入判断 
if( mm == NULL){
printf("memory allocate error.
");
}
 
for(i=0;i<n;i++){ 
printf("输入第 %d 个数:", i+1); 
scanf("%d",&q[i]);
}

//debug
for(i=0; i<n; i++){
printf("%10d", q[i]);
if( (i+1) % 5 == 0){
printf("
");
}
}
//debug end

printf("
命令格式:p x y
 \
p: 1修改数据, x数据是y 
 \
   2求 x y之间的和
 \
   3求 x y之间的最大值
");
    
    printf("
共有%d条命令
", m);
 
for(i=0;i<m;i++){
printf("输入第 %d 条命令", i+1); 
scanf("%d %d %d",&(mm[i].p),&(mm[i].x),&(mm[i].y));
}

for(i=0;i<m;i++)
{
sum=0;
switch(mm[i].p)//hanson--命令 
{
case 1:
q[mm[i].x-1]=mm[i].y;
break;
case 2:
//sum清零==在这里清零==而不是上面 
sum  = 0;//hanson 
for(j=mm[i].x-1;j<=mm[i].y-1;j++)
  sum+=q[j];
printf("%d
",sum);
break;
case 3:
sum=q[mm[i].x-1];

for(j=mm[i].x-1;j<=mm[i].y-1;j++)
if(sum<q[j])
sum=q[j];
printf("%d
",sum);
break;
}
}

getchar();
getchar();

return 0;
}

1、有几个小问题,帮你修改了,你看下。有注释

2、哪里超时?==调试内容是什么?




我想问一下C语言可以自学考证吗?
对,你要先学C语言,编程入门的,看书学习效果好,考不考证其实对就业关系不大,公司招聘直接出题,你通过就OK,不会看什么 证书的,毕竟混文凭的人太多了,如果是为了验证自己的知识技能,考证也不失为一个好方法。英国2425印度979缅甸960韩国,里面的数字能加 我 ,我也是学这个的大学生,希望能...

问一个C语言的问题
4、第一个出错原因是中断函数不可以放在头文件中,头文件的内容是在连接的时候一起并入程序的。第二个错误,你可能单词拼写错误,yue这个词。你可以用ctrl+F进行查找。5、应该注意,不要重复包含。头文件要右#ifndef #define #endif 并入函数尽量只写函数声明,在.c里面写函数体。在c语言里是可以改...

C语言,帮我解释一下,看不懂
输出变量a的值后再跟一个逗号然后输出%f修饰的变量x的值,然后是逗号,接着是整形变量a的值,最后是字符(用%c说明),也就是c2中存放数据对应的字符,会得到输出显示为:107,322.000000,107,B 最后这个B就是c2中存放的数据(ASCII码)66对应的字符,可以百度ASCII码,查表得到。

我做C语言有个题目不会。。想问问各位大侠。。。拜托了。。为什么答案是...
因此在子函数那个语句能够改变主函数中b的值,只是指针形参的一个用法,第二个形参就不用多说了把,子函数中形参的变化不会引起主函数中变量变化,因为使用的不是同一内存空间!所以调用子函数会输出bB,主函数中输出语句会输出bA!楼主能懂吧?不懂的话继续问哦!

C语言 想问一下 char *A = (char *)malloc(255); ... free(A);_百度...
实际上你可以要也可以不要。但有些时候你需要判断A是否已经释放掉的话 那么你就要A=NULL;这样方便下面判断 if(A==NULL) \/\/那么就是数据已经释放掉 { \/\/释放后的相关操作 } else { \/\/未释放的相关操作 }

问大家一个C语言问题。下面的将字符转换成数值是怎么转换的啊,看不懂...
num=num*10+(str[i]-'0');这一句实现了字符串到数字的转化。首先:char型都有个ASCII码值,str[i]-'0'就把数字字符便成了相应的数字值。再者:num=num*10+每次读到一个数字,就把num乘10,再加上这个数字,由于是从高位读取的,就还原出了这个数。就像23可以分解成:2*10+3一样,逐步...

我想问你下C语言方面?
include <stdio.h> void main(){ int a[10];int i, j, temp;printf("please input ten numvber:\\n");for (i = 0; i < 10; i++)scanf("%d", &a[i]);for (i = 0; i < 10 - 1; i++)for (j = 0; j < 10 - 1 - i; j++){ if (a[j] > a[j + 1]){ ...

c语言中有这样一个定义:int **p;问一下这个p是定义的什么变量?
这个p是定义的二级指针变量,即“指向指针的指针”。

我想问一下:C程序有什麼情况语句最后不用或不能加分号? 请完整全面...
分号在 C语言里面很重要:每个语句和数据声明的最后必须有一个分号。分号是C语句的必要组成部分。分号是不可缺少的。即使是程序钟最后一个语句也应包含分号,分号表示语句结束。但如果表示主函数后就不用加分号,最好先熟悉C语言,每个语句结束后有分号是C语言的一个特点 ...

我想学计算机C语言,可是不知道要学哪些知识
不要将其它地方改动,也不能将这个标记删除,否则影响成绩)、程序编写40%(按给定要求编写程序,方法不限,只要求运行结果正确,一般已对整个程序写出若干行,文件名一般为Prog1.xxx)。4、三级:A类偏硬要求使用任一编辑器如Editor编写宏汇编语言程序,B类编软要求使用Turbo C2.0编写C语言程序。

盘山县13291267145: 我想问一下我这个C语言程序为什么在运行过程中出现终止重试取消呢? #include<stdio.h -
势倪得斯: 首先你得告诉我你想做什么.至少每个函数和循环都应该打上注释.这么复杂的逻辑关系,就不说别人看的时候要一个个推,更关键的是这程序不出1一个月你自己都不记得你写的什么意思了.我只能帮你看下用法了,算法你需要看的话你把你...

盘山县13291267145: 为什么我的C语言程序没有错误却总是不能运行 -
势倪得斯: Linking... LINK : fatal error LNK1104: cannot open file "Debug/Cpp1.exe" 执行 link.exe 时出错. 这个我也遇见过,其实你这段话写的没一点问题,但为什么会出现这样的原因是因为:他并没有构建,就是说在linking的时候已经出现了问题,问题一般是由于类库的某些文件在自己不知道的情况下给修改了,已构成无法构建的问题!

盘山县13291267145: C语言,我的程序为什么运行不对 -
势倪得斯: 1、scanf("%s,%s,%s",&p,&q,&r);p,q,r是数组,本身就是地址,不必用&;2、B进制,每位上的数字最大值是B-1,因此,应该先查看3个数各位的数字,取最大值+1作为B的最小值.3、注意,base在每次求1个数之前,要重新归1.你求sum1,sum2,sum3前,都没有归1,base累积,越来越大.第一个base=1;应该在for(i=len1-1;i>=0;i--)前面,for(i=len2-1;i>=0;i--),for(i=len3-1;i>=0;i--)前面各有一个base=1;4、不管几进制,r>=p,r>=q都必须满足.否则无解.

盘山县13291267145: 想问一下为什么我C语言写的程序运行起来未响应 -
势倪得斯: C语言的数组长度不能为变量.因此不能定义a[n]、b[n]、c[n]

盘山县13291267145: 我想问一下我这个c语言程序为什么得70分而已,究竟哪里还有错误呢?利用字母可以组成一些美丽的图形,下面给出了一个例子:... -
势倪得斯:[答案] 行数小于列数时,完美输出! 行数大于列数呢!比如5行4列,只输出了4行字符,第五行为空.

盘山县13291267145: C语言程序为什么不能运行 -
势倪得斯: 1 2 3 4 5 6 7 8 9 10 11 12 13 14#include <stdio.h>intmain(void) {inti, num = 0;i = 1; do{num += 1;i ++;}while(i <= 100); printf("%d\n", num);return0; } 试试这个!

盘山县13291267145: 我的C语言程序为什么老是显示有错误,执行不了? -
势倪得斯: 你是出现unable to open input file “cos.obj” 吧? 一个很简单的处理方法就是把TC安装到C盘下(最好是根目录). 现在网上下的一般都是压缩包吧?右键点它,再左键点“解压文件...”,选目录的时候就选“C:\”. 其实还有好多方法啦~~比...

盘山县13291267145: C语言程序在cmd中运行 -
势倪得斯: 假设编译好的程序在e盘的source文件下: 启动cmd, 在cmd下输入e:(切换到e盘), 输入cd source(切换到source文件夹下), 输入***.exe(编译后程序的名字) 这样就可以运行了. 可以按照实际情况修改.

盘山县13291267145: C语言基础中的运行问题,问一下其运行结果为什么是1 -
势倪得斯: printf("%d\n",a<=100); //程序执行的是这行.a<=100成立,结果为真,以%d输出就是1.

盘山县13291267145: C语言问题:为什么我写好一个程序运行一下,我的桌面上就多了两个文件? -
势倪得斯: 只要你不不运行程序,它就不会出现,据我所知,还没有哪个编译系统能直接运行你写好的代码,他们都经过了这样一个过程,编译程序后一运行的那一瞬间,系统就保存了两个文件,目标程序文件OBJ,再由OBJ生成应用程序EXE,如果你没有保存,他就会自动保存 至于出现在桌面上和文件名是NONAME,那是你保存路径,和文件名没设置好

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网