C语言练习题求解

zhuoshen322 2020-01-22 05:39:31
寒假入门练习
...全文
1094 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hongyan2021 2020-02-03
  • 打赏
  • 举报
回复
有点尴尬,之前练习过
_Emiya 2020-01-31
  • 打赏
  • 举报
回复
再来个逆推的,这个要求必须要有2个及以上的元素才行 unsigned long long test2(int iNum, int* arr1, int* arr2) { unsigned long long lMax_2[2] = {arr1[iNum-1], arr2[iNum-1]}; unsigned long long lMax_1[2] = {arr1[iNum-2]+lMax_2[1], arr2[iNum-2]+lMax_2[0]}; unsigned long long lMax[2] = {lMax_1[0], lMax_1[1]}; int* arrTem[2] = {arr1, arr2}; for(int i = iNum-3; i >= 0; —i) { lMax[0] = arrTem[0][i] + (lMax_1[1] > lMax_2[1] ? lMax_1[1] : lMax_2[1]); lMax[1] = arrTem[1][i] + (lMax_1[0] > lMax_2[0] ? lMax_1[0] : lMax_2[0]); memcpy(lMax_2, lMax_1, sizeof(lMax_2)); memcpy(lMax_1, lMax, sizeof(lMax_1)); } return lMax[0] > lMax[1] ? lMax[0] : lMax[1]; }
_Emiya 2020-01-31
  • 打赏
  • 举报
回复
引用 20 楼 luj_1768 的回复:
19楼代码可能通不过:使用的专有词太多(IMax, size, iLoop);另外,iLoop的取值需要跟踪一下。
stack<vector> sTem 改为 stack<vector<int>> sTem。 .cpp可以编译过
GKatHere 2020-01-31
  • 打赏
  • 举报
回复
引用 23 楼 weixin_45826375 的回复:
再来个逆推的,这个要求必须要有2个及以上的元素才行
有理,那我来个顺推法,元素个数不限

#ifndef MAX
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
#endif

long long ftp_(const int n, const int* a, const int* b)
{
	long long fp[3] = { a[0], b[0], 0 }; // a, b, 0
	for (int nn = 1; nn < n; nn++)
	{
		long t0 = MAX(fp[1] + a[nn], fp[2] + a[nn]);
		long t1 = MAX(fp[0] + b[nn], fp[2] + b[nn]);
		long t2 = MAX(fp[0] + 0, fp[1] + 0);
		fp[0] = t0, fp[1] = t1, fp[2] = t2;
	}

	return MAX(MAX(fp[0], fp[1]), fp[2]);
}
luj_1768 2020-01-31
  • 打赏
  • 举报
回复
19楼代码可能通不过:使用的专有词太多(IMax, size, iLoop);另外,iLoop的取值需要跟踪一下。
_Emiya 2020-01-29
  • 打赏
  • 举报
回复
先来个计算所有的然后比较的方法 unsigned long long test1(int iNum, int* arr1, int* arr2) { unsigned long long lMax = 0L; unsigned long long lTem = 0L; stack<vector> sTem; sTem.push(vector<int>()); sTem.top().push_back(0); sTem.top().push_back(1); int* arrTem[2] = { arr1, arr2 }; stack<unsigned long long> sTemMax; sTemMax.push(0L); int iLoop = 0; while(sTem.size() > 0) { if(sTem.top().size() < 1) { sTem.pop(); sTemMax.pop(); —iLoop; lTem = sTemMax.size() > 0 ? sTemMax.top() : 0L; continue; } int iTem = sTem.top().back(); sTem.top().pop_back(); lTem += iTem < 0? 0 : arrTem[iTem][iLoop]; if(++iLoop < iNum) { sTem.push(vector<int>()); sTem.top().push_back(iTem < 0? 0 : -1); sTem.top().push_back(iTem < 1? 1 : 0); sTemMax.push(lTem); } else { lMax = lTem > lMax? lTem : lMax; lTem = sTemMax.top(); iLoop = ((int)sTemMax.size()) - 1; } } return lMax; }
weixin_44006804 2020-01-28
  • 打赏
  • 举报
回复
谢谢分享学习中谢谢大家
_Emiya 2020-01-27
  • 打赏
  • 举报
回复
引用 4 楼 GKatHere 的回复:
题目有误,根据输入,8+4是第2天与第3天,不是第2天与第4天。 输入、输出不说了,只说算法: 因为不能两天完成同一BOSS的任务,那么头一天选取了BOSS 1,第二天必选取BOSS 2; 即是:(单数位列表 + 双数位列表 ) 与 (双数位列表 + 单数位列表 ),两者之间取最大值。 以例: 9 3 5 7 5 8 4 1, 取(9 +5) +( 8 +1) 与 (3 +7)+(5+4)的最大值
不一定,你可以第二天什么都不干然后第三天选另一个的啊
极冰海涯 2020-01-27
  • 打赏
  • 举报
回复
引用 14 楼 浅ღ᭄ꦿ夏࿐的回复:
想知道1e9什么意思,是1到9吗?
1en = 10^n
流ღ᭄ꦿ年࿐ 2020-01-26
  • 打赏
  • 举报
回复
感觉第一个样例最大报酬只有24
流ღ᭄ꦿ年࿐ 2020-01-26
  • 打赏
  • 举报
回复
想知道1e9什么意思,是1到9吗?
qq_37029521 2020-01-26
  • 打赏
  • 举报
回复
谢谢分享学习中谢谢大家
一星伴月 2020-01-25
  • 打赏
  • 举报
回复
方便发一下题目链接吗?
夜半少年 2020-01-24
  • 打赏
  • 举报
回复
路过,这题目,阔以哇
GKatHere 2020-01-23
  • 打赏
  • 举报
回复
如下:要不a取 0,2,4,6,8,...., b取 1,3,5,7,9....; 要不b取 0,2,4,6,8,...., a取 1,3,5,7,9....; int a[] = {9, 3, 5, 7 }; int b[] = {5, 8, 4, 1 }; int c = max(a[0] + a[2] + b[1] + b[3], a[1] + a[3] + b[0] + b[2])
zhuoshen322 2020-01-23
  • 打赏
  • 举报
回复
引用 4 楼 GKatHere的回复:
题目有误,根据输入,8+4是第2天与第3天,不是第2天与第4天。 输入、输出不说了,只说算法: 因为不能两天完成同一BOSS的任务,那么头一天选取了BOSS 1,第二天必选取BOSS 2; 即是:(单数位列表 + 双数位列表 ) 与 (双数位列表 + 单数位列表 ),两者之间取最大值。 以例: 9 3 5 7 5 8 4 1, 取(9 +5) +( 8 +1) 与 (3 +7)+(5+4)的最大值
你所说的单数位列表和双数位列表是啥,好像没有学过
j: ) 2020-01-23
  • 打赏
  • 举报
回复
引用 9 楼 j: )的回复:
[quote=引用 7 楼 j: )的回复:]最简单的思路就是设两个数组a、b,两种情况,a取单数下标元素b取双数下标元素,取所有值的和,另一种反过来,对比两种的大小情况就行了
lz没看懂我可以完整写出来[/quote] 好的,这样好像是错的,不一定选取相邻两条就是最大薪酬
j: ) 2020-01-23
  • 打赏
  • 举报
回复
引用 7 楼 j: )的回复:
最简单的思路就是设两个数组a、b,两种情况,a取单数下标元素b取双数下标元素,取所有值的和,另一种反过来,对比两种的大小情况就行了
lz没看懂我可以完整写出来
andema 2020-01-23
  • 打赏
  • 举报
回复
不错不错不错不错
j: ) 2020-01-23
  • 打赏
  • 举报
回复
最简单的思路就是设两个数组a、b,两种情况,a取单数下标元素b取双数下标元素,取所有值的和,另一种反过来,对比两种的大小情况就行了
加载更多回复(4)

69,371

社区成员

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

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