c语言~西天取经

题目描述

经过九九八十一难,唐僧和他徒弟们终于到了西天。幽静的雷音寺中包含了 n 个房间,每个房间中 k 本经书,每本经书都有一定的价值。由于时间限制,每个房间只够拿一本经书,很显然,肯定拿那本价值最大的经书。

输入描述

输入数据的第一行是房间数 n。接下来的 n 行每行描述了房间的经书情况:第一个数是经书的本数 k,然后是 k 个整数,表示每一本经书的价值。

输出描述

占一行,唐僧他们总共能拿到经书的最大价值(在 long 范围以内)。

样例输入

4

3 2 2 5

5 3 3 4 4 1

2 30 23

5 10 20 30 20 30

样例输出

69

思路

我一开始看到有行有列的,以为要用数组来实现,搞了半天连输入都办不到。
后来百度了一下,发现自己想的太复杂了,其实这题完全不需要数组
只需要for和while循环就行了

代码实现

#include<stdio.h>
int main()
{
	int n;//房间数
	while(scanf("%d",&n)!=EOF)
	{
		int k;//经书的数量
		int sum=0,x;
		//int temp=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d",&k);
			int temp=0;
			while(k--)
			{
				scanf("%d",&x);
				temp=temp>x?temp:x;
			}
			sum+=temp;
		}
		printf("%d\n",sum);
	}
	return 0;
}

对了,这个代码上面不是有一行被我//掉了吗,就是下面这个

//int temp=0;

我一开始把temp放在for循环外面的时候,按照输入样例输入后,输出结果是70,比正确结果多了1,我就想,这到底是咋回事啊?如果有人知道的话麻烦帮帮忙,解答一下吧?之前也有过这种情况,百思不得其解。。。。

以上。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值