pitia上的题目,代码的结果没问题,在线提交总提示运行超时

NJUPT-BUGMAKER 2021-04-21 10:18:27

求各位找出超时的原因,并斧正。
#include <stdio.h>
int main()
{

long int h;
long int n;
double s=0,x=0;
int i;
scanf("%d %d",&h,&n);
x=h;
for(i=1;i<=n;i++)
if(i==1)
s+=x;
else{
x*=0.5;
s+=2*x;
}
x*=0.5;
printf("%.1f %.1f",s,x);
}
...全文
404 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-04-26
  • 打赏
  • 举报
回复
C和C++ 完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
qzjhjxj 2021-04-23
  • 打赏
  • 举报
回复
引用 7 楼 qq_37949449 的回复:
为什么会这样呢? 哪位大哥可以解答一下
这个没有为什么,其实long int 也没什么问题,就像给一个人安排了500平的房子,不合理而已。long int 占位多点,所以计算的时候,十个手指不够了,还得把脚趾也搬出来了,白白浪费了资源。
  • 打赏
  • 举报
回复
卡时间通常需要O(1)算法,O(n)不行

#include <stdio.h>

int main()
{
double h, n, m = 1;

scanf("%lf%lf", &h, &n);
if (n == 0) h = 0;
*(unsigned long long *)&m |= -1ull << (54 - (int)n) & 0x000fffffffffffffull;
printf("%.1f %.1f\n", h * (((int)n > 1) + m), h / (1ull << (int)n));

return 0;
}

NJUPT-BUGMAKER 2021-04-22
  • 打赏
  • 举报
回复
为什么会这样呢? 哪位大哥可以解答一下
NJUPT-BUGMAKER 2021-04-22
  • 打赏
  • 举报
回复
破案了 超时都是因为定义了long int型变量
NJUPT-BUGMAKER 2021-04-22
  • 打赏
  • 举报
回复
还是运行超时
qzjhjxj 2021-04-22
  • 打赏
  • 举报
回复
这样改下,试试:
#include <stdio.h>
int main()
{

	long int h;
	long int n;
	double s=0,x=0;
	int i;
	scanf("%d %d",&h,&n);
	s=x=h;
	for(i=1;i<n;i++)//for(i=1;i<=n;i++)
	                //	if(i==1)
	                //		s+=x;
	                //	else
       {
	   	x*=0.5;
	   	s+=2*x;
       }
    x*=0.5;
	printf("%.1f %.1f\n",s,x);//'\n'
        
    return 0;
}
NJUPT-BUGMAKER 2021-04-22
  • 打赏
  • 举报
回复
引用 1 楼 forever74 的回复:
输出末尾加上换行符?
试了,还是报超时[face]monkey2:019.png[/face]
NJUPT-BUGMAKER 2021-04-22
  • 打赏
  • 举报
回复
引用 8 楼 自信男孩 的回复:
#include <stdio.h>
int main()
{

long int h;
long int n;
double s=0,x=0;
int i;
scanf("%ld %ld", &h,&n);
x = h;

i = 0;
while (i < n) {
s += x + x / 2;
x /= 2;
i++;
}

printf("%.1lf %.1lf\n", s, x);

return 0;
/*
for(i=1;i<=n;i++)
if(i==1)
s+=x;
else{
x*=0.5;
s+=2*x;
}
x*=0.5;
}
printf("%.1f %.1f",s,x);
*/
}

试试这个版本~
只要定义了long int型变量,在线提交就会显示超时,代码在vs上运行没问题。
自信男孩 2021-04-22
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{

long int h;
long int n;
double s=0,x=0;
int i;
scanf("%ld %ld", &h,&n);
x = h;

i = 0;
while (i < n) {
s += x + x / 2;
x /= 2;
i++;
}

printf("%.1lf %.1lf\n", s, x);

return 0;
/*
for(i=1;i<=n;i++)
if(i==1)
s+=x;
else{
x*=0.5;
s+=2*x;
}
x*=0.5;
}
printf("%.1f %.1f",s,x);
*/
}

试试这个版本~
qzjhjxj 2021-04-21
  • 打赏
  • 举报
回复
供参考:
#include <stdio.h>
int main()
{

	long int h;
	long int n;
	double s=0,x=0;
	int i;
	scanf("%d %d",&h,&n);
	x=h;
	for(i=1;i<=n;i++)
		if(i==1)
			s+=x;
		else{
			x*=0.5;
			s+=2*x;
		}
    x*=0.5;
	printf("%.1f %.1f\n",s,x);//'\n'
        
    return 0;
}
forever74 2021-04-21
  • 打赏
  • 举报
回复
输出末尾加上换行符?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧