day 4

C语言 洛谷刷题 菜鸟

P2006 赵神牛的游戏
未通过!!!因为运行时间超过了,但是还是先打卡记录,今天写代码先到这里,虽然还没过,但是还有其他作业,今天的代码使用了我比较薄弱的链表,明天好好分析一下为什么时间超时,初步感觉:1.循环的嵌套导致时间的增加,2.链表的使用不知道会不会导致时间的增加??
明日改进代码后,将再次发在此贴后面,再分析原因,先去肝其他作业。

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	long int value;
	struct node *next;
}Node;
int main()
{
	Node *head,*p,*last,*temp;
	long int k,m,n;
	long int ai,bi;
	long int i,j;
	long int temp_ai,temp_bi;
	head = NULL;
	scanf("%ld%ld%ld",&k,&m,&n);
	for(i = 1;i <= m;i++)
	{
		scanf("%ld%ld",&ai,&bi);
		p = last = (Node*)malloc(sizeof(Node));
		last = head;
		if(ai<=k)
		{
			temp_ai = k/ai;
			if((bi*temp_ai) >= n)
			{
				p->value = i;
				p->next = NULL;
				if(last!=NULL)
				{
					while(last->next !=NULL)
					{
						last = last->next;
					}
					last->next = p;
				}
				else
				{
					head = p;
				}
			}
		}
	
	}
	temp = head;
	if(head == NULL)
	{
		printf("-1");
	}
	else
	{
		while(temp!=NULL)
		{
			printf("%ld ",temp->value);
			temp = temp->next;
		}
	}
	
}

未通过,时间超时

今天一下课马上就来改代码了,首先汲取了一下讨论区里面大家的讨论,发现一个大问题,一般给的测试数据就是输入一大串,输出一大串,我老是想着将每次的输出存在一个数组或者是链表里面最后一起输出,保持和测试数据的格式一致,但是讨论区惊现的代码里面有输入一份数据,输出一个结果的代码,而且是被允许通过的,因为我就修改了我的代码之后,按照这种方式过得。
前面发现运行时间超时,主要是使用了指针存储结果,如果少了这个存储结果,以及循环输出结果的过程,就会大大降低运行的时间,代码也会变得很简单,因为本题也是入门的,本人菜鸟只敢从入门开始打起。
其次,我修改了我的代码之后,发现一个问题,还是通不过,下载了洛谷给的测试数据,发现题目有大坑,就是有的技能有伤害并且不需要体力值的情况没有被考虑到,所以导致结果的没有被通过,最后修改加了一个分支语句进去就通过啦。
下面是正确的代码

#include<stdio.h>
int main()
{
	int k,m,n;
	int ai,bi;
	int i,flag;
	int temp_ai;
	flag = 0;
	scanf("%d%d%d",&k,&m,&n);
	for(i = 1;i <= m;i++)
	{
		scanf("%d%d",&ai,&bi);
		if(ai<=k&&ai!=0)
		{
			temp_ai = k/ai;
			if((bi*temp_ai) >= n)
			{
				flag = 1;
				printf("%d ",i);
			}	
		}
		else if(ai == 0)
		{
			flag = 1;
			printf("%d ",i);
		}
	
	}
	if(flag == 0)
	{
		printf("-1");
	}	
}

已经通过了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值