Vijos-P1024-卡布列克圆舞曲(c++ && 简单模拟)

P1024卡布列克圆舞曲

Accepted

标签:模拟

描述

卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个较大的数和一个较小的数,然后用较大数减去较小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。

例如:4321-1234=3087

8730-378=8352

8532-2358=6174

7641-1467=6147

如果K位数也照此办理,它们不是变成一个数,而是在几个数字之间形成循环,称作卡布列克圆舞曲。例如对于五位数54321:

54321-12345=41976

97641-14679=82962

98622-22689=75933

97533-33579=63954

96543-34569=61974

97641-14679=82962

我们把82962 75933 63954 61974称作循环节,即卡布列克圆舞曲。

格式

输入格式

文件包含若干行,每行为一个待求“卡布列克圆舞曲”的起始整数(小于maxlongint)

输出格式

每行为对应整数的循环节,数据之间用空格隔开。

样例1

样例输入1[复制]

4321
54321

样例输出1[复制]

6174
82962 75933 63954 61974

限制

各个测试点1s

来源

Xiaomengxian

高一的第二次考试题

博主决定不总是在HDU水下去了!重返Vijos(其实就是换个地方水.....)不过好歹,Vijos的题做起来脑袋痛.....今天我可是花了不少时间来弄懂这道题.....里面的初中生高中生Oier太厉害了.....哥给跪了......Orz!!!

感谢talent123前辈提供的精妙绝伦的算法!(在我看来就是这样!)

你看上面写的是高一第二次考试题......大学狗被高中生完爆!

本题注意:输入的数据也得考虑,它也可能是循环节!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double number,circle[1000];
int check_print(int i)                           <span style="white-space:pre">			</span>//检查是否出现循环节或者循环点
{
    int j;
    for(j=0;j<i;j++)
    {
        if(circle[j]==circle[i])
            break;
    }
    if(j==i) return 0;
    else
    {
        for(;j<i;j++)
        {
            printf("%.0lf ",circle[j]);         <span style="white-space:pre">			</span> //直接输出循环节
        }
        printf("\n");
        return 1;
    }

}
double pow1(int n)<span style="white-space:pre">						</span>        //数组下标是几就返回10的几次方
{
    if(n==0)
        return 1;
    else
        return pow1(n-1)*10;
}
double confuse(double number)<span style="white-space:pre">				</span>               //求最大值最小值相减构成递归
{
    char ch[150];
    int temp;
    double max=0,min=0;
    sprintf(ch,"%.0f",number);                             <span style="white-space:pre">	</span>      //初始化ch数组
    int i,j;
    for(i=0;i<strlen(ch);i++)
    {
        for(j=0;j<strlen(ch)-i-1;j++)
            if(ch[j]>ch[j+1])
            {
                temp=ch[j];
                ch[j]=ch[j+1];
                ch[j+1]=temp;
            }
    }
    for(i=0;i<strlen(ch);i++)
    {
        max+=pow1(i)*(ch[i]-'0');
        min+=pow1(strlen(ch)-i-1)*(ch[i]-'0');
    }
    return max-min;

}
void femain(double number)
{
    int i=0;
    for(i=0;;i++)
    {
        circle[i]=number;
        if(check_print(i)==1) break;
        else
        {
            number = confuse(number);
        }
    }
}

int main()
{
    while(1)
    {
        if(scanf("%lf",&number)==-1)break;
        else
        {
            femain(number);
        }
    }
    return 0;
}
时间: 2024-11-05 06:31:09

Vijos-P1024-卡布列克圆舞曲(c++ && 简单模拟)的相关文章

卡布列克常数

程序地址:http://www.cheemoedu.com/exercise/65 问题描述: 任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个较大的数和一个较小的数,然后用较大的数减去较小数,不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数.例如: 4321-1234=30878730-378=83528532-2358=61747641-1467=6174编写程序验证卡布列克常数. 我的代码: n=list(raw_input("

列式数据库的简单分析

转自:列式数据库的简单分析 这些天看数据仓库的内容,发现一个新内容——列式存储.曾经有想过把数据库行列转置作成索引,不过没有深想,没想到列式数据库已经开始发展起来了.首先看下WIKI上对列式数据库的解释: 列式数据库是以列相关存储架构进行数据存储的数据库,主要适合与批量数据处理和即席查询.相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理.数据库以行.列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:EmpI

sd卡格式化怎么恢复呢?简单恢复小技巧

sd卡格式化怎么恢复呢?简单恢复小方法.我们现在很多的时候会感觉我们的SD卡或许并没有多大的用处,但是有些时候,我们的SD卡上会保存着我们重要的回忆,因此我们对SD卡也是十分重视的. 那若是你删除了我们的SD卡数据,我们该怎么办呢?我们是不是可以通过一些方法去找回我们的SD卡数据呢?我们是不是真的可以找回呢?其实我们在格式化后停止对SD卡的输入,然后使用下面的方法去恢复. 1.因为需要用到电脑来帮助恢复,所以我们可以在开始的时候选择先打开电脑在电脑浏览器上下载"互盾数据恢复软件",之后

章子怡家人百度法国红酒撒谎饭卡上法兰克

http://www.ebay.com/cln/ldicn.mz6dm/2015.02.12/177030163015 http://www.ebay.com/cln/tan_qi5/2015.02.12/176903144013 http://www.ebay.com/cln/l.lu104/2015.02.12/177030175015 http://www.ebay.com/cln/ya01191/2015.02.12/176722580014 http://www.ebay.com/cl

GridLookUpEdit多列模糊查询最简单方式 z

GridLookUpEdit的知识库是RepositoryItemGridLookUpEdit,切确的说GridLookUpEdit只是RepositoryItemGridLookUpEdit的一个壳而已, 这也就是在GridControl的GridView中,对列绑定的是RepositoryItemGridLookUpEdit而不是GridLookUpEdit的原因,RepositoryItemGridLookUpEdit才是GridLookUpEdit的核心,所以处理这个过滤操作,其实就是对

python 之简单模拟银行系统功能(卡号申请、还款、支付、取现)

一.简单说明 1.源代码文件见附件 Credit.zip 2.关于转账功能,因时间问题,转账功能待续 4.逻辑图 二.代码 1.包encryption中的(password.py文件) #!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Thu Nov 10 14:47:29 2016 密码相关功能 @author: toby """ import hashlib, re #密

bestcoder 1002 列变位法解密(模拟)

Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文. 比如: 原文:123456789 密钥:4 变换后的矩阵: [pre]1234 5678 9xxx[/pre] (最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同) 密文:159263748 再比如: 原文:Hello, welcome to

2016&quot;百度之星&quot; - 测试赛(热身,陈题)-列变位法解密(模拟)

列变位法解密 Accepts: 152 Submissions: 418 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文. 比如: 原文:1234567

扫描SD卡,显示歌曲信息,简单播放MP3,层层低级掌握服务.............

一,在主线程直接完成这一切,app退出,歌曲不播放了....(掌握contentResolver读取media信息和播放mp3) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65