1005 继续(3n+1)猜想

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:

每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。

输出格式:

每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。

输入样例:

6
3 5 6 7 8 11

输出样例:

7 6

思路:

将给定数组中的每一个数的计算数列记录下来,然后对这一系列数组进行消除处理,即:将每个数列的第一个数,在其他数列中(从第二位开始)查找,如果在其他数列中找到了,则证明其他数列包含这个数列,清空自己的数组数列,循环执行,最后留下的就是互相不包含的数组。

//关键的查找循环体,其中cal是一个二维的vecotor,存放每一个数的计算数列
vector<int>::iterator it;
for (int i = 0; i < K; i++)//对每一个数列与其他数列比较,如果其第一个元素存在其他数列中,清空该数列,并追加首位为0与次位的0
    {
        for (int j = 0; j < K; j++)
        {
            it = find(cal[j].begin() + 1, cal[j].end(), cal[i][0]);//从i+1行的第二个元素开始找
            if (it != cal[j].end())//如果在j中找到,清除自己,并追加0以便之后别的数组查找
            {
                cal[i].clear();
                cal[i].push_back(0);
                cal[i].push_back(0);
                break;
            }
        }
    }

查找完后余下一堆[0,0]的数组以及相互包含的数组,取出数组的首位降序输出即可

代码:

继续(3n+1)猜想

//1005  继续(3n+1)猜想
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

void calculate(vector<int> &a, int n)//计算数字n的序列并将其存在vector中
{
    while (n != 1)
    {
        a.push_back(n);
        if (n % 2 == 0)n /= 2;
        else
        {
            n = (3 * n + 1) / 2;
        }
    }
}

int main()
{
    int K;//存放K个整数
    cin >> K;
    int *store = new int[K];//存放需要判断的数;
    for (int i = 0; i < K; i++)
    {
        cin >> store[i];
    }
    vector<int> *cal = new vector<int>[K];//计算每一个的数列
    for (int i = 0; i < K; i++)
    {
        calculate(cal[i], store[i]);
    }
    delete[]store;//释放store
    vector<int>::iterator it;
    for (int i = 0; i < K; i++)//对每一个数列与其他数列比较,如果其第一个元素存在其他数列中,清空该数列,并追加首位为0
    {
        for (int j = 0; j < K; j++)
        {
            it = find(cal[j].begin() + 1, cal[j].end(), cal[i][0]);//从i+1行的第二个元素开始找
            if (it != cal[j].end())//如果在j中找到,清除自己
            {
                cal[i].clear();
                cal[i].push_back(0);
                cal[i].push_back(0);
                break;
            }
        }
    }
    vector<int>result;
    for (int i = 0; i < K; i++)
    {
        if (cal[i][0] != 0)
        {
            result.push_back(cal[i][0]);
        }
    }
    sort(result.begin(), result.end());//将结果排序,sort默认从小到大
    reverse(result.begin(), result.end());//排序结果反序

    cout << *result.begin();
    for (it = result.begin()+1; it != result.end(); it++)
    {
        cout <<' ' << *it ;
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容