知秋@ 发表于 2020-12-21 14:27:54

风过无痕1989 发表于 2020-12-21 14:16
先留个程序放这里,再慢慢理解他的题意吧:
青蛙站在第 3 片荷叶上,它可以向第 4 片荷叶上跳 1 次,也可 ...

不是得他还有每个荷叶要求跳跃的次数 不是输入两个数的

知秋@ 发表于 2020-12-21 14:29:52

一世轻尘 发表于 2020-12-21 12:35
艹,看了将近半个小时才看懂了,他喵的和图论似的,我来解释一波,就是有n片荷叶(这个n是你自己输入的)然 ...

这题怎么穷举呀我也是能看懂题 但是不知道怎么下手了

知秋@ 发表于 2020-12-21 14:36:09

我给大家解释一下题,这个题是没毛病的。我能看懂但是不知道怎么下手。
看他输入样例是
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的)
求个大佬给个代码参考一下吧

风过无痕1989 发表于 2020-12-21 14:45:39

知秋@ 发表于 2020-12-21 14:27
不是得他还有每个荷叶要求跳跃的次数 不是输入两个数的

那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序是站在第4片荷叶上,王二麻子的程序是站在第5片荷叶上,赵四小姐的程序是站在第1片荷叶上

一世轻尘 发表于 2020-12-21 14:55:42

本帖最后由 一世轻尘 于 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片荷叶只能往一个方向走)。

知秋@ 发表于 2020-12-21 14:57:08

风过无痕1989 发表于 2020-12-21 14:45
那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序 ...

你看我发的那个题目解释 是那个意思

一世轻尘 发表于 2020-12-21 14:57:17

风过无痕1989 发表于 2020-12-21 14:45
那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序 ...

你可以用一个for循环来使一开始分别站在n个荷叶上,然后用个类似穷举的办法找到最大值,不过我写不出来{:10_277:}

风过无痕1989 发表于 2020-12-21 15:14:50

一世轻尘 发表于 2020-12-21 14:57
你可以用一个for循环来使一开始分别站在n个荷叶上,然后用个类似穷举的办法找到最大值,不过我写不出来{: ...

现在想得个最佳答案可真难呀,PY的题目不会做,C++的题目也不会做。好吧,闲着也是闲着,我想想

一世轻尘 发表于 2020-12-21 15:22:34

风过无痕1989 发表于 2020-12-21 15:14
现在想得个最佳答案可真难呀,PY的题目不会做,C++的题目也不会做。好吧,闲着也是闲着,我想想

擦,加油,我感觉我的思路虽然要写很多,但你应该能写出来{:10_330:}

风过无痕1989 发表于 2020-12-21 15:45:25

一世轻尘 发表于 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 15:46:40

本帖最后由 知秋@ 于 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 16:18:21

知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;


很抱歉,答案不对,你可以输入3 2 1试一下,结果是2,还有我不学c++看不懂你的程序

风过无痕1989 发表于 2020-12-21 16:26:27

知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;


早说嘛,C++

一世轻尘 发表于 2020-12-21 16:32:51

知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;


输入6 2 7 9 4 3答案也不对,结果是24,实际是25
页: 1 [2]
查看完整版本: 求大佬给个思路把 实在想不出来了 5555555