UVA在线判断3n+1:错误答案

Posted

技术标签:

【中文标题】UVA在线判断3n+1:错误答案【英文标题】:UVA online judge 3n+1: Wrong Answer 【发布时间】:2015-01-15 06:12:43 【问题描述】:

我一直在研究这个问题,但每次提交时我都会得到错误的答案,但是当我输入示例案例时,我似乎会产生正确的答案。有人可以帮我吗? 问题可以在本站找到:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=36

代码本身:

#include <vector>
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;

long find_cycle_length(long b)

    // Finds the max cycle of b
    long max_cycle = 1;
    while (b != 1)
    
        if (b % 2 != 0)
        
            b = (3 * b) + 1;
            ++max_cycle;
        
        else if (b % 2 == 0)
        
            b /= 2;
            ++max_cycle;
        
    
    return max_cycle;

long find_max_cycle(vector <long>& b)

    vector <long> temp;
    for (int i = 0; i < b.size(); ++i)
    
        long buffer = b[i];
        temp.push_back(find_cycle_length(buffer));
    
    long max_cycle = *max_element(temp.begin(), temp.end());

    return max_cycle;


int main()

        long i = 0; // First number
        long j = 0; // Second number
        long size = 0; // Determines the size of the vector buffer
        long counter = 0; // Used to fill buffer
        cin >> i >> j;


        if (j > i) 
            size = (j - i) + 1;
            counter = i;
        
        else if (i > j) 
            size = (i - j) + 1;
            counter = j;
        
        else if (i == j)
        
            size = 1;
            counter = i;
        

        vector<long> buffer(size); // Used to store all numbers i to j  
        for (int x = 0; x < buffer.size(); ++x) // fill buffer
        
            buffer[x] = counter;
            ++counter;
        

        cout << i << " " << j << " " << find_max_cycle(buffer) << endl;

        return 0;


【问题讨论】:

我想你忘了阅读这部分:“输入将由一系列整数对组成”。不止一个。 您的设置有问题。您可以找到每个最大循环per-pair-line,输出,然后移动到下一行和下一行。我看不到buffer 的用处。 【参考方案1】:

我认为您可能误解了说明。样本输入不是

1 10

但是

1 10
100 200
201 210
900 1000

你没有一个while循环让用户给你多行输入——你的程序在一行之后退出。你为什么不做那个改变——让用户继续输入新的输入行,直到给你一个文件结尾(或者——它对编码来说是一样的——接受来自输入的所有输入行文件重定向到标准输入)——看看你是否得到了一个OK?

哦,我看到 molbdnilo 在第一条评论中提出了这个建议。无论如何:他是对的。

【讨论】:

以上是关于UVA在线判断3n+1:错误答案的主要内容,如果未能解决你的问题,请参考以下文章

(HDU/UVA)1032/100--The 3n + 1 problem(3n+1问题)

The 3n + 1 problem UVA - 100

挑战编程 uva100 3n+1

Uva 10252,无法弄清楚

uva 489 Hangman Judge

二柱子四则运算在线答题系统