C 为什么这个更快?意见书1对意见书2

C 为什么这个更快?意见书1对意见书2,c,memory,time,C,Memory,Time,问题贴在电脑上练习 编写一个程序,打印给定范围内的数字。但是对于三个打印的倍数“Fizz”而不是数字,对于五个打印的倍数“Buzz”。对于三和五的倍数的数字,打印“FizzBuzz”。在每个字符串或数字后打印新行 输入格式第一行将是测试用例的数量,T。下一行将有T个整数,用N表示 输出格式对于每个测试用例,打印从1到N的数字。但是要遵循问题陈述中给出的规则 约束条件 1在这一类型的所有测试中总是有一个轻微的缺陷,这是由操作系统任务切换和其他因素引起的。如果您想优化这些程序中的任何一个,您应该使用

问题贴在电脑上练习

编写一个程序,打印给定范围内的数字。但是对于三个打印的倍数“Fizz”而不是数字,对于五个打印的倍数“Buzz”。对于三和五的倍数的数字,打印“FizzBuzz”。在每个字符串或数字后打印新行

输入格式第一行将是测试用例的数量,T。下一行将有T个整数,用N表示

输出格式对于每个测试用例,打印从1到N的数字。但是要遵循问题陈述中给出的规则

约束条件


1在这一类型的所有测试中总是有一个轻微的缺陷,这是由操作系统任务切换和其他因素引起的。如果您想优化这些程序中的任何一个,您应该使用探查器来分析(完全优化的机器,例如使用
-O3
)代码,并优化探查器识别的瓶颈


尽管如此,如果在完全禁用优化的情况下编译,那么第一个解决方案比第二个解决方案稍微慢一点是有道理的,因为第二个解决方案包含一个以
inp[l]形式出现的微优化
在内部循环之外,因此表达式只对每个唯一值求值一次。

当执行时间延长200微秒时,提交#1如何更快?顺便说一句,这种差异远远在误差范围内(时间测量、流程启动的不确定性和其他因素)。基于一次运行,差异可以忽略不计,因此完全没有理由确定一个程序比另一个程序“快”。
1.0058
1.006
快。作为一名程序员,你需要知道这些事情…:)那是我愚蠢的错误,实际上2比提交1快…@sandepsingrana提交2有一个冗余
int s=1赋值,这显然使它更快;-)现在说真的,如果你真的问0.2毫秒的差,你就不可能是认真的。@dxiv是的,你是对的……你能把它作为一个有深刻解释的答案贴出来吗。谢谢,我想hackerearth是用执行程序的cpu周期来测量时间的,而不是墙上的时钟时间@Seb@SandeepSinghRana问题使用时间(以秒为单位)而不是CPU周期作为度量。不管怎样,我想你可能会发现我的假设是正确的,无论是时间还是CPU周期计数都是用来测量的。即使我把inp[l]放在循环之外,也没有什么区别@Seb@SandeepSinghRana这就是我在第一段中试图解释的;这里还有更重要的瓶颈,即任务切换偏差,您的实验还将测量I/O作为所花费的大部分时间。
#include <stdio.h>
int main() {
    int uc;
    scanf("%d",&uc);
    int inp[uc];
    int l=0;
    for(l=0;l<uc;l++){
        scanf("%d",&inp[l]);
    }
    for(l=0;l<uc;l++){

        int s;
        for(s=1;s<=inp[l];s++){
            if(s%5==0&&s%3==0){
                printf("FizzBuzz\n");
            }else if (s%3==0) {
                printf("Fizz\n");
            }else if(s%5==0){
                printf("Buzz\n");
            }else
            {
                printf("%d\n",s);
            }

        }
    }
    return (0);
}
#include <stdio.h>
int main() {
    int uc;
    scanf("%d",&uc);
    int inp[uc];
    int l=0;
    for(l=0;l<uc;l++){
        scanf("%d",&inp[l]);
    }
    for(l=0;l<uc;l++){
        int k=inp[l];
        int s=1;
        for(s=1;s<=k;s++){
            if(s%3==0&&s%5==0){
                printf("FizzBuzz\n");
            }else if (s%3==0) {
                printf("Fizz\n");
            }else if(s%5==0){
                printf("Buzz\n");
            }else
            {
                printf("%d\n",s);
            }

        }
    }
    return (0);
}
Submission             Time                Memory
1                      1.006  s            64KB
2                      1.0058 s            64KB