鱼C论坛

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

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

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

不是得  他还有每个荷叶要求跳跃的次数 不是输入两个数的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这题怎么穷举呀  我也是能看懂题 但是不知道怎么下手了
想知道小甲鱼最近在做啥?请访问 -> 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的)
求个大佬给个代码参考一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那你这个题的答案可就五花八门了,我的程序是站在第3片荷叶上,张三的程序是站在第2片荷叶上,李四的程序是站在第4片荷叶上,王二麻子的程序是站在第5片荷叶上,赵四小姐的程序是站在第1片荷叶上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]);
        }
        for(k=0;k<n;k++)
        {
                for(j=0;j<100000;j++)
                {
                        
                }
        }
}
前面的大概就是这个意思了,后面我的水平就不够了,我的第一个思路是穷举,后来发现他是一个动态的n,这样就不能用有限个for循环来解,第二个思路是利用随机数产生1和-1,青蛙每在某个位置移动时,就使他所对应的数组(表示该位置可移动的次数)的值减一,直至青蛙所在位置的前后所能移动的次数都为0,然后使他循环足够多的次数来获得正确答案,不过这个要写很长的代码,因为分很多种情况(比如说第一片和第n片荷叶只能往一个方向走)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你看我发的那个题目解释 是那个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你可以用一个for循环来使一开始分别站在n个荷叶上,然后用个类似穷举的办法找到最大值,不过我写不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

现在想得个最佳答案可真难呀,PY的题目不会做,C++的题目也不会做。好吧,闲着也是闲着,我想想
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

擦,加油,我感觉我的思路虽然要写很多,但你应该能写出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

        printf("%d\n", count);
}
想知道小甲鱼最近在做啥?请访问 -> 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  还是太蒟蒻了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

很抱歉,答案不对,你可以输入3 2 1试一下,结果是2,还有我不学c++看不懂你的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

早说嘛,C++
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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