❶ c語言程序超時問題
把scanf("%d%d",&a,&b); 改為 scanf("%d %d",&a,&b);
試試~
❷ C語言的一些簡單程序的超時...
#include<stdio.h>
intmain()
{
intn,tmp;
while(scanf("%d",&n)!=EOF)
{
//解出來那個值是一個循環
switch(n%10)
{
case0:tmp=6;break;
case1:tmp=1;break;
case2:tmp=2;break;
case3:tmp=4;break;
case4:tmp=8;break;
case5:tmp=5;break;
case6:tmp=10;break;
case7:tmp=9;break;
case8:tmp=7;break;
case9:tmp=3;break;
default://不可能
break;
}
printf("%d ",tmp);
}
return0;
}
❸ c語言程序,時間超限,怎麼解決
將scanf輸入換成從文件讀取數據,使用fopen, fread, fwrite之類的函數,不要從終端上直接輸入。或者使用重定向<從文件讀取數據。
如果效率還是不行,再將printf改成輸出到文件中。
❹ 【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.應用多線程,這樣同時可以處理幾個數據,不過你的演算法就要修改一下了。
❺ c語言問題提交顯示超時,怎麼優化才可以
這道題的難點就是時間,如果用最直接的方法一個個找肯定可以找出來,但是500000個字元串如果作回溯比較將非常耗時。
像wufangyu1992說的思路是對的,想辦法把字元串做一個哈希表。但是如果對每一個字元串都提取特徵碼這個不容易實現而且相當耗時,這里用鄰接表實現一個允許沖突的哈希表:
根據題目知道每個字元串最多有10個字元,每個字元的ASCII碼不超過127,所以我們可以計算每個字元串的ASCII碼和,以這個ASCII碼的和作為這個字元串的特徵碼,可知這個特徵碼最大為:127*10 = 1270。當然這種計算肯定有可能出現兩個不同字元串計算出來的特徵碼一樣,但是我們在特徵碼相同的地方用鏈表繼續添加到末尾即可。
鄰接數組建立之後,讀入每個字元串,計算特徵碼,然後根據特徵碼把該字元串添加到鄰接表。添加的時候先查找這個字元串是否已經存在,如果該字元串節點已存在則表示這個字元串已經出現兩次,直接刪除該字元串所在的節點;如果這個字元串不在鄰接表上則將其添加到鄰接表。
所有字元都處理完之後,因為有偶數個的字元串都已經被移除,所以鄰接表中只剩下一個未匹配的字元串節點,將其遍歷出來即可。
具體代碼實現如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*accordingtoASCIItable,
*is127,
*/
#defineTABLE_SIZE(127*10)
structnode_s;
typedefstructnode_s{
charstr[11];
structnode_s*next;
}node_t;
inlineintcal_index(constchar*str)
{
intsum=0;
while(*str)
{
sum+=*str;
str++;
}
returnsum;
}
voidproccess_node(node_t*table[],constchar*str,intindex)
{
node_t*p=table[index],*ppre=NULL;
if(p==NULL)/*firstnodeofthisindex,justaddittotable*/
{
p=(node_t*)malloc(sizeof(node_t));
strcpy(p->str,str);
p->next=NULL;
table[index]=p;
return;
}
/*findstr,ifexitsdeleteit,elseaddedtotail*/
while(p)
{
if(!strcmp(p->str,str))
{
/*ifmatched,deleteitfromthelist*/
if(ppre==NULL)/*ifitsthefirstnode*/
{
free(p);
table[index]=NULL;
return;
}
else
{
ppre->next=p->next;
free(p);
return;
}
}
ppre=p;
p=p->next;
}
/*nostringmatched,addanewnodetotail*/
p=(node_t*)malloc(sizeof(node_t));
strcpy(p->str,str);
p->next=NULL;
ppre->next=p;
}
node_t*get_result(node_t*table[],intcount)
{
inti;
for(i=0;i<count;i++)
{
if(table[i]!=NULL)
{
returntable[i];
}
}
}
intmain()
{
node_t**table,*result;
intindex,i,n;
chartmp[11];
scanf("%d",&n);
table=(node_t**)malloc(sizeof(node_t*)*TABLE_SIZE);
if(table==NULL)
{
fprintf(stderr,"nomemory!");
return-1;
}
memset(table,0,sizeof(node_t*)*TABLE_SIZE);
for(i=0;i<n;i++)
{
scanf("%s",tmp);
index=cal_index(tmp);
proccess_node(table,tmp,index);
}
result=get_result(table,TABLE_SIZE);
printf("%s ",result->str);
free(result);
free(table);
return0;
}
❻ 我這C語言為什麼超時 啊 要怎麼改
求余是一個挺耗時的操作,我不知道你寫的是什麼題目,建議少用求余,當數字大,循環多的時候,求余挺耗時的,你可以考慮換一下思路
❼ C語言程序提交超時了。。怎麼改進。。
首先你可以把for(i=2;n>=i;i++)
改成for(i=2;n/2>=i;i++)試試,因為一個數的因子一定不大於他的1/2
❽ 為什麼這個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語言小代碼超時怎麼辦
問題出在這一行
sort(a+1,a+n+1,cmp);
在輸入的時候,你僅錄入了n個數據,而排序的時候是從第二個到第n+1個。
應該是
sort(a, a+n, cmp);
❿ C語言程序超時 怎麼改
把條件中的函數調用獨立出來,條件盡量使用數據的直接比較。