鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 知秋@

[已解决]求大佬给个思路把 实在想不出来了 5555555

[复制链接]
 楼主| 发表于 2020-12-21 14:27:54 | 显示全部楼层
风过无痕1989 发表于 2020-12-21 14:16
先留个程序放这里,再慢慢理解他的题意吧:
青蛙站在第 3 片荷叶上,它可以向第 4 片荷叶上跳 1 次,也可 ...

不是得  他还有每个荷叶要求跳跃的次数 不是输入两个数的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这题怎么穷举呀  我也是能看懂题 但是不知道怎么下手了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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的)
求个大佬给个代码参考一下吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 14:45:39 | 显示全部楼层
知秋@ 发表于 2020-12-21 14:27
不是得  他还有每个荷叶要求跳跃的次数 不是输入两个数的

那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序是站在第4片荷叶上,王二麻子的程序是站在第5片荷叶上,赵四小姐的程序是站在第1片荷叶上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 14:55:42 | 显示全部楼层
本帖最后由 一世轻尘 于 2020-12-21 15:24 编辑

我分享一下我的吧
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5.         int n;//荷叶数
  6.         int i,j;//循环变量
  7.         int k;//青蛙此时在的位置
  8.         int temp=0;
  9.         int num=0;//最多的次数
  10.         printf("请输入荷叶数:\n");
  11.         scanf("%d",&n);
  12.         int *p;
  13.         p=(int*)malloc(sizeof(int));
  14.         printf("请依次输入第1,2片荷叶,第3,4片荷叶...之间最多跳跃的次数\n");
  15.         for(i=0;i<n-1;i++)
  16.         {
  17.                 scanf("%d",&p[i]);
  18.         }
  19.         for(k=0;k<n;k++)
  20.         {
  21.                 for(j=0;j<100000;j++)
  22.                 {
  23.                        
  24.                 }
  25.         }
  26. }
复制代码

前面的大概就是这个意思了,后面我的水平就不够了,我的第一个思路是穷举,后来发现他是一个动态的n,这样就不能用有限个for循环来解,第二个思路是利用随机数产生1和-1,青蛙每在某个位置移动时,就使他所对应的数组(表示该位置可移动的次数)的值减一,直至青蛙所在位置的前后所能移动的次数都为0,然后使他循环足够多的次数来获得正确答案,不过这个要写很长的代码,因为分很多种情况(比如说第一片和第n片荷叶只能往一个方向走)。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你看我发的那个题目解释 是那个意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你可以用一个for循环来使一开始分别站在n个荷叶上,然后用个类似穷举的办法找到最大值,不过我写不出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

现在想得个最佳答案可真难呀,PY的题目不会做,C++的题目也不会做。好吧,闲着也是闲着,我想想
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

擦,加油,我感觉我的思路虽然要写很多,但你应该能写出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 15:45:25 | 显示全部楼层
一世轻尘 发表于 2020-12-21 15:22
擦,加油,我感觉我的思路虽然要写很多,但你应该能写出来

若每一步都要输入的话,感觉不是写程序,而是在凑答案
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i, n, count = 0;
  5.         int arr[100];               // 若编译器支持C99,将元素个数100改为n
  6.         printf("请输入荷叶的片数:");
  7.         scanf("%d", &n);
  8.         for (i = 0;i < n - 2;i++)   // n片荷叶之间有n - 1个间隔,数组又是从0开始的,故是n - 2
  9.         {
  10.                 scanf("%d", &arr[i]);
  11.                 count += arr[i];
  12.         }

  13.         printf("%d\n", count);
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[j] % 2 != 0)
                {
                    t += v[j];
                }
                else
                {
                    t += v[j] - 1;
                }
            }
        }
        else
        {
            // left
            t = 0;
            for (int j = i - 2; j >= 0; --j) {
                if (v[j] % 2 == 0)
                {
                    t += v[j];
                }
                else if (v[j] > 1)
                {
                    t += v[j] - 1;
                }
            }
            for (int j = i - 1; j < v.size(); ++j) {
                if (v[j] % 2 != 0)
                {
                    t += v[j];
                }
                else
                {
                    t += v[j] - 1;
                }
            }
            if (v[v.size() - 1] % 2 == 0)
            {
                t++;
            }
            result = max(result, t);
            //right
            t = 0;
            for (int j = i - 1; j < v.size(); ++j) {
                if (v[j] % 2 == 0)
                {
                    t += v[j];
                }
                else if (v[j] > 1)
                {
                    t += v[j] - 1;
                }
            }
            for (int j = i - 2; j >= 0; --j) {
                if (v[j] % 2 != 0)
                {
                    t += v[j];
                }
                else
                {
                    t += v[j] - 1;
                }
            }
            if (v[0] % 2 == 0)
            {
                t++;
            }
        }
        result = max(result, t);
    }
    cout << result;
    return 0;
}
我写了一个不知道有没有bug  还是太蒟蒻了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 16:18:21 | 显示全部楼层
知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;

很抱歉,答案不对,你可以输入3 2 1试一下,结果是2,还有我不学c++看不懂你的程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 16:26:27 | 显示全部楼层
知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;

早说嘛,C++
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 16:32:51 | 显示全部楼层
知秋@ 发表于 2020-12-21 15:46
#include
#include
using namespace std;

输入6 2 7 9 4 3答案也不对,结果是24,实际是25
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-7 13:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表