首页 > 软件 > C程序超时,帮忙修改一下

C程序超时,帮忙修改一下

软件 2022-05-08

为什么这个C语言程序会运行超时,怎么改进?

今天的风好大,是冬天的号角吧。突然就明白了,这就是我们现在的处境。 冬天,埋在土里的任性而韧性的种子,生命的脉动让我们沸腾,可外表依然是一片的死寂。 小时候特别喜欢把人生比喻成四季,因为春天是充满希望饱含生命力且躁动的,夏天是绚烂茂盛高昂的,秋天是博大宽厚稳重丰盈的,冬天看起来是安详寂静的。春夏秋冬,从出生到驾鹤西去?可总是感觉着不对。人生好像并不这么简单得如一条直线,有的人出生时就春暖花开,而有的人出生时却寒风料峭,但不管如何,我们都来自同一个本源。 古人说得好,“万物土里生”。所以说啊,我们的起初,都是从土里开始的。人生的春花秋草,其实原本都隐含于冬天的土里,冬,春,夏,秋,时序好像应该这

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

#include
#include
/*
Name:
Copyright:
Author:
Date:28/01/1421: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操作的结果。
样例输入
43
1234
213
143
314
样例输出
6
3
数据规模与约定
对于20%的数据n<=100,m<=200。
对于50%的数据n<=5000,m<=5000。
对于100%的数据1<=n<=100000,m<=100000,0<=格子权值<=10000。
*/
typedefstructm0
{
intp;
intx;
inty;
}h;
intmain()
{
intn,m,i,*q=NULL,j,sum;
h*mm=NULL;
printf("输入第一组参数:nm\n\
n表示有多少个数据\n\
m表示接下来m行的输入参数pxy。\n");

scanf("%d%d",&n,&m);
q=(int*)malloc(sizeof(int)*n);//hanson--为初始数据分配单元
if(q==NULL){
printf("memoryallocateerror.\n");
}
//加入判断
mm=(h*)malloc(sizeof(h)*m);//hanson--为m行的输入数据分配单元
//加入判断
if(mm==NULL){
printf("memoryallocateerror.\n");
}

for(i=0;i printf("输入第%d个数:\t",i+1);
scanf("%d",&q[i]);
}

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

printf("\n命令格式:pxy\n\
p:1修改数据,x数据是y\n\
2求xy之间的和\n\
3求xy之间的最大值\n");

printf("\n共有%d条命令\n",m);

for(i=0;i printf("输入第%d条命令\t",i+1);
scanf("%d%d%d",&(mm[i].p),&(mm[i].x),&(mm[i].y));
}

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

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

getchar();
getchar();

return0;
}

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

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

C语言超出时限怎么改?

#include

int main(){

long n;

while(scanf("%ld",&n)!=EOF){

if(n%2==0||n%5==0||(n-5)%2==0)printf("yes\n");

//如果时间要求太紧,这一行也可以改成

////if(n!=1&&n!=3)printf("yes\n");

//在程序要求的输入中,既符合要求,又省时间


else printf("no\n");

}

return 0;}

//这样改才符合题意,所有能用2元5元支付的价格不是2的倍数(偶数)就是5的倍数(一部分奇数),

//不过还有减去5后能被2整除的数

//(另一些奇数,与前面的5的倍数可以覆盖几乎所有奇数),

//比5小的数与5的差再被2整除只能得负数,一定不为0

//一定要多动脑筋呀,加油楼主

//等等我附个测试结果过来 编译器gcc

编译和准备输入测试文件

对样例进行测试

0.099秒


0.43秒 1000行的另一个测试结果

1000行的另一组测试数据开头


尾部的数据计算结果与实际一致

c语言 运行超时 如何改进?

a[i]=malloc(sizeof(char)*10000); 改为: a[i]=(char*)malloc(sizeof(char)*10000); malloc需要指定强制类型转换

【C语言新手问题】这个程序超时怎么办

你好,你要优化时间效率。这里可以考虑在计算和的平方之前,对于根本不符合的直接排除。 1.首先,对于数x,它的平方根不可能超过sqrt(x);所以当你计算出两部分和的时候,先检查这个条件是否满足,不满足则continue下一轮循环 2.一个数x平方的个位数跟x的个位数存在一定关系。 x个位数 x^2个位数 1或9 1 2或8 4 3或7 9 4或6 6 5 5 0 0 因此在计算两部分和的时候如果1条件满足,那么检测条件2。 根据上面两个条件,应该可以提高一定的效率。 3.应用多线程,这样同时可以处理几个数据,不过你的算法就要修改一下了。

标签:CC++ 信息技术 C(编程语言) 编程 编程语言

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved.