先留个程序放这里,再慢慢理解他的题意吧:
青蛙站在第 3 片荷叶上,它可以向第 4 片荷叶上跳 1 次,也可 ...
不是得他还有每个荷叶要求跳跃的次数 不是输入两个数的 一世轻尘 发表于 2020-12-21 12:35
艹,看了将近半个小时才看懂了,他喵的和图论似的,我来解释一波,就是有n片荷叶(这个n是你自己输入的)然 ...
这题怎么穷举呀我也是能看懂题 但是不知道怎么下手了 我给大家解释一下题,这个题是没毛病的。我能看懂但是不知道怎么下手。
看他输入样例是
5
2 1 2 1
也就是1和2能跳2次,2和3能跳1次,3和4能跳2次,4和5能跳1次
提示给的顺序是3 4 3 2 1 2也就是5次
但是这个只让求最大的 也就是这个次序是不唯一的你只需要求出最大值就可以
比如这个你可以是2 1 2 3 4 3 或者 2 1 2 3 4 5 但是不管怎样求出来的最大值都是5次 所以题是没问题的(是不能从1跳到3的)
求个大佬给个代码参考一下吧 知秋@ 发表于 2020-12-21 14:27
不是得他还有每个荷叶要求跳跃的次数 不是输入两个数的
那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序是站在第4片荷叶上,王二麻子的程序是站在第5片荷叶上,赵四小姐的程序是站在第1片荷叶上 本帖最后由 一世轻尘 于 2020-12-21 15:24 编辑
我分享一下我的吧#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;//荷叶数
int i,j;//循环变量
int k;//青蛙此时在的位置
int temp=0;
int num=0;//最多的次数
printf("请输入荷叶数:\n");
scanf("%d",&n);
int *p;
p=(int*)malloc(sizeof(int));
printf("请依次输入第1,2片荷叶,第3,4片荷叶...之间最多跳跃的次数\n");
for(i=0;i<n-1;i++)
{
scanf("%d",&p);
}
for(k=0;k<n;k++)
{
for(j=0;j<100000;j++)
{
}
}
}
前面的大概就是这个意思了,后面我的水平就不够了,我的第一个思路是穷举,后来发现他是一个动态的n,这样就不能用有限个for循环来解,第二个思路是利用随机数产生1和-1,青蛙每在某个位置移动时,就使他所对应的数组(表示该位置可移动的次数)的值减一,直至青蛙所在位置的前后所能移动的次数都为0,然后使他循环足够多的次数来获得正确答案,不过这个要写很长的代码,因为分很多种情况(比如说第一片和第n片荷叶只能往一个方向走)。 风过无痕1989 发表于 2020-12-21 14:45
那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序 ...
你看我发的那个题目解释 是那个意思 风过无痕1989 发表于 2020-12-21 14:45
那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序 ...
你可以用一个for循环来使一开始分别站在n个荷叶上,然后用个类似穷举的办法找到最大值,不过我写不出来{:10_277:} 一世轻尘 发表于 2020-12-21 14:57
你可以用一个for循环来使一开始分别站在n个荷叶上,然后用个类似穷举的办法找到最大值,不过我写不出来{: ...
现在想得个最佳答案可真难呀,PY的题目不会做,C++的题目也不会做。好吧,闲着也是闲着,我想想 风过无痕1989 发表于 2020-12-21 15:14
现在想得个最佳答案可真难呀,PY的题目不会做,C++的题目也不会做。好吧,闲着也是闲着,我想想
擦,加油,我感觉我的思路虽然要写很多,但你应该能写出来{:10_330:} 一世轻尘 发表于 2020-12-21 15:22
擦,加油,我感觉我的思路虽然要写很多,但你应该能写出来
若每一步都要输入的话,感觉不是写程序,而是在凑答案
#include<stdio.h>
int main()
{
int i, n, count = 0;
int arr; // 若编译器支持C99,将元素个数100改为n
printf("请输入荷叶的片数:");
scanf("%d", &n);
for (i = 0;i < n - 2;i++) // n片荷叶之间有n - 1个间隔,数组又是从0开始的,故是n - 2
{
scanf("%d", &arr);
count += arr;
}
printf("%d\n", count);
} 本帖最后由 知秋@ 于 2020-12-21 18:50 编辑
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, t, result = 0;
vector<int> v;
cin >> n;
for (int i = 0; i < n - 1; ++i)
{
cin >> t;
v.push_back(t);
}
for (int i = 1; i < n; ++i) {
if (i == 1)
{
t = 0;
for (int j = i - 1; j < v.size(); ++j) {
if (v % 2 != 0)
{
t += v;
}
else
{
t += v - 1;
}
}
}
else
{
// left
t = 0;
for (int j = i - 2; j >= 0; --j) {
if (v % 2 == 0)
{
t += v;
}
else if (v > 1)
{
t += v - 1;
}
}
for (int j = i - 1; j < v.size(); ++j) {
if (v % 2 != 0)
{
t += v;
}
else
{
t += v - 1;
}
}
if (v % 2 == 0)
{
t++;
}
result = max(result, t);
//right
t = 0;
for (int j = i - 1; j < v.size(); ++j) {
if (v % 2 == 0)
{
t += v;
}
else if (v > 1)
{
t += v - 1;
}
}
for (int j = i - 2; j >= 0; --j) {
if (v % 2 != 0)
{
t += v;
}
else
{
t += v - 1;
}
}
if (v % 2 == 0)
{
t++;
}
}
result = max(result, t);
}
cout << result;
return 0;
}
我写了一个不知道有没有bug还是太蒟蒻了! 知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;
很抱歉,答案不对,你可以输入3 2 1试一下,结果是2,还有我不学c++看不懂你的程序 知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;
早说嘛,C++ 知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;
输入6 2 7 9 4 3答案也不对,结果是24,实际是25
页:
1
[2]