如何在C语言中获得快速I / O?

时间:2014-01-22 13:22:53

标签: c

如何在c中获得快速输入/输出?我一直在使用scanf和printf但是在编程竞赛中我得到了“超出时间限制”。请指出哪些函数用于c中的快速I / O.

#include<stdio.h>
#include<math.h>
main()
{
int i,j,flag,num,t,a[500000],k;
unsigned int n;
scanf("%d",&t);
if(t<=10)
{
    while(t!=0)
    {
        scanf("%d",&n);
        if(n<=70000)
        {
            i=1;flag=1;num=3;a[0]=2;k=0;
            while(i<n)
            {
                for(j=3;(j<=sqrt(num))&&(flag==1);j++)
                {
                   if(num%j==0)
                   {
                    flag=0;
                   }

            }
            if(flag==1)
            {
                a[i]=num;
                num=num+2;
                flag=1;
                printf("%d",a[k]);
                k++;
                i++;
            }
            else
            {
                flag=1;
                num=num+2;
            }
           }
       }
       printf("%d",a[k]);
       t--;
       printf("\n");

    }
   }
}

这是我得到“超出时间限制”的代码

3 个答案:

答案 0 :(得分:3)

你怎么知道,你的程序是I / O绑定的?像http://codility.com这样的编程竞赛通常会指定所需的时间复杂度,如O(N)。如果您提交的复杂度为O(N ^ 2)的算法,即使您使用世界上最快的I / O库,也无法获胜。

答案 1 :(得分:0)

printf / scanf是缓冲I / O.它首先捕获缓冲区中的I / O.您可以使用fflush()函数刷新内存中的缓冲区。

答案 2 :(得分:0)

fgetsputs应该比格式化的IO快得多。