❶ 我想問一下我這個c語言程序為什麼運行超時!需要怎麼樣修改呢
#include<stdio.h>
#include<stdlib.h>
/*
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表示有多少個數據
m表示接下來m行的輸入參數pxy。 ");
scanf("%d%d",&n,&m);
q=(int*)malloc(sizeof(int)*n);//hanson--為初始數據分配單元
if(q==NULL){
printf("memoryallocateerror. ");
}
//加入判斷
mm=(h*)malloc(sizeof(h)*m);//hanson--為m行的輸入數據分配單元
//加入判斷
if(mm==NULL){
printf("memoryallocateerror. ");
}
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(" ");
}
}
//debugend
printf(" 命令格式:pxy
p:1修改數據,x數據是y
2求xy之間的和
3求xy之間的最大值 ");
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--命令
{
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 ",sum);
break;
case3:
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();
return0;
}
1、有幾個小問題,幫你修改了,你看下。有注釋
2、哪裡超時?==調試內容是什麼?
❷ c語言輸出超限什麼意思
C語言輸出超過內存位元組所規定的長度。C語言中short與long兩個限定符的引入可以為我們提供滿足實際需要的不同長度的整形數。int通常代表特定機器中證書的自然長度。short類型通常為16位,long類型通常為32位,int類型可以為16位或32位。
各編譯器可以根據硬體特性自主選擇合適的類型長度,但要遵循下列限制:short與int類型至少為16位,long類型至少為32位,並且short類型不得長於int類型,而int類型不得長於long類型。
(2)c語言程序運行為什麼時間超限擴展閱讀
C語言常見類型佔用位元組數
常見的有char、int、long、short、float、double及指針等。
(1)字元類型
這里單只char,char變數在內存中存儲的是字元對應的ASCII碼值。所以長度也是固定的,為1個位元組。
(2)整數類型
查了資料發現對各個類型的整數佔用位元組數是有一個規定的,雖然16位32位或者64位的機子各種類型所佔用的長度並不一樣。規則如下:
1、short 至少佔用2個位元組。
2、int 建議為一個機器字長。32位環境下機器字長為4位元組,64位環境下機器字長為8位元組。
3、short 的長度不能大於 int,long 的長度不能小於 int。
4、short並不一定短,long並不一定短,有可能都和int一樣長。
(3)浮點數(小數)
C中浮點數有兩種,float和double,不像整數,小數的長度始終是固定的,float佔用4個位元組,double佔用8個位元組。
(4)指針
C中指針即為地址,所以編輯器的定址空間則是指針的地址范圍。所以指針變數在32位機器的定址空間為2^32,要將所有地址都表示出來則需要為4個位元組長度,所以要佔用4個位元組長度。同理64位的編譯器則需要8個位元組長度。
❸ C語言OJ時間超限是什麼原因造成
不好意思,不想看代碼.
我的想法是, 輸入一個數,控制輸入的行數比如while(a--){......}
然後嵌套循環, 每行輸入一個數,控制輸入的單詞個數,以空格結束while(b--){......}
然後輸入每個單詞,一個一個字元讀入,while((c=getchar())!=' '){.......}
第三個循環里判斷每個字元,比如第一個字元是'_'還是字母,第二第三個字元.....
當然,實現起來也麻煩,但值得一試,不是嗎?至少可以不用數組了吧,你覺得呢
❹ C語言程序運行,為什麼時間超限
這樣改改試試
#include <stdio.h>
void main( )
{
char str[1000];
int i;
gets(str);
for(i = 0; str[i]; i++)
{
if(str[i] >= 'A' && str[i] <= 'Z')
str[i] += 32;
}
puts(str);
}
❺ 請問C語言中「佔用CPU時間超限」的錯誤是單純因為死循環引起的嗎
還有的是因為轉換類型而造成的```比如23本來是整形的``但是如果你轉換成雙精度實型``那有效數字達到16位數``在內存中是64位存儲```如果一個C程序有很多這樣的轉換``那就會造成CPU工作負荷過大時間超限而無法進行```
❻ 為什麼這個C語言程序會運行超時,怎麼改進
代碼段中的
while(m%b!=0)
b++;
if(m==b)
printf("%5d",m),c++;
改為
for(;b*b<=m;++b)
if(m%b==0)
break;
if(b*b>m)
{printf("%5d",m),c++;}
❼ c語言超過時間限制
從你的程序可以看出,是在求"從鍵盤輸入一個大於2的整數k,輸出不大於k的最大的素數。"你的程序盡管也可找出來,但選擇的演算法效率太低,你是從小到大逐一判斷,然後取其最大的,這種方法需先求出不大於k的所有的素數,效率當然低了。正解是從大到小逐一判斷,遇到的第一個素數即為不大於k的最大素數。程序可如下
#include <stdio.h>
#include <math.h>
void main( ) {
int i, k, n, f, s;
scanf("%d", k);
for(n = 0, f = k; !n && (f > 1); f--)
{
for(n = 1, i = 2, s = sqrt(f); n && (i <= s); i++)
if(f % i == 0) n = 0;
}
printf("The max prime number is %d\n", f);
}