❶ 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语言程序超时 怎么改
把条件中的函数调用独立出来,条件尽量使用数据的直接比较。