【发布时间】:2016-02-21 03:15:54
【问题描述】:
在 Hackerearth 上发布问题以供练习。
编写一个程序,打印给定范围内的数字。但是对于三的倍数打印“Fizz”而不是数字,对于五的倍数打印“Buzz”。对于同时是三和五的倍数的数字,打印“FizzBuzz”。在每个字符串或数字之后打印一个新行。
输入格式第一行是测试用例的数量,T。下一行是T个整数,用N表示。
输出格式 对于每个测试用例,打印从 1 到 N 的数字。但要遵循问题陈述中给出的规则。
约束
1
N 是一个整数。
提交 1:
#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);
}
提交2:
#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);
}
当我执行时。
第 1 步:输入 2
第 2 步:输入 3
第 3 步:输入 15
我发现提交 2 比提交 1 快。
Submission Time Memory
1 1.006 s 64KB
2 1.0058 s 64KB
现在我的问题是为什么?
【问题讨论】:
-
提交#1 的执行时间为 更长 的时间为 200 微秒,如何更快?顺便说一句,这种差异远在误差范围内(时间测量、流程启动的不确定性和其他因素)。基于单次运行,差异如此微不足道,完全没有理由明确得出一个程序比另一个程序“快”的结论。
-
1.0058比1.006快。要成为一名程序员,你需要知道这些事情......:) -
这是我的愚蠢错误,实际上 2 比提交 1 快......
-
@SandeepSinghRana 提交 2 有一个多余的
int s=1;分配,这显然使它更快;-) 现在说真的,如果你真的问的是 0.2 毫秒的差异,你就不能认真了。跨度> -
@dxiv 是的,您是对的....您可以将其作为答案发布并进行一些深入的解释。谢谢