UVa 694 - The Collatz Sequence

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=635

题目:给出了如下算法;

step 1:选择任意一个正整数A为序列的第一个数;

step 2:如A=1或者A>L,则停止

step 3:如A为偶数,则A=A/2,执行step 2;

step 4:如A为奇数,则A=3A+1,执行step 2;

现在给定初始值A,和限定最大数值L;求从A开始,到A=1||A>L,经过数值个数。

思路: 当A为偶数时,A值减小,如A减小到等于1,则停止。如A为奇数,则A增大,当A>L则停止。

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
   //freopen("input.txt","r",stdin);
   int a1,b1,count,k=0;
   long long a,b,c;
   while(cin>>a1>>b1)
   {
     k++;
     if(a1<=0&&b1<=0)
        break;
     count=1;
     a=a1;b=b1;
     while(a%2==0)
     {
        a=a>>1;
        count++;
     }
     while(1)
     {
       if(a==1)
        break;
       if(a%2)
        {
          c=3*a+1;
          if(c<=b)
            {
              a=c;count++;
              while(a%2==0)
               {  a=a>>1;
                  count++;
               }
            }
         else
           break;
        }
     }
       cout<<"Case "<<k<<": A = "<<a1<<", limit = "<<b1<<", number of terms = "<<count<<endl;
    }
   return 0;
}
时间: 2024-12-26 02:42:54

UVa 694 - The Collatz Sequence的相关文章

UVaOJ 694 - The Collatz Sequence

题目很简单,但是一开始却得到了Time Limit的结果,让人感到很诧异.仔细阅读发现,题目中有一个说明: Neither of these, A or L, is larger than 2,147,483,647 (the largest value that can be stored in a 32-bit signed integer). 所以应该是A溢出造成了程序“死循环”,最终导致超时. -----------------------------------------------

projecteuler----&gt;problem=14----Longest Collatz sequence

title: The following iterative sequence is defined for the set of positive integers: n n/2 (n is even) n 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 40 20 10 5 16 8 4 2 1 It can be seen that thi

UVA - 348Optimal Array Multiplication Sequence(递推)

题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘,求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘不满足交换率但满足结合率.dp[i][j] 代表第1个矩阵到第j个矩阵之间的最少的乘法次数,转移状态方程:dp[i][j] = Min(dp[i][k] + dp[k + 1][j]  + A[i - 1] * A[k] *A[j]) k>= i && k <= j - 1.A0A1A2A3..Ak  |  Ak+1

UVA 10534 三 Wavio Sequence

Wavio Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 10534 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 const int inf=0x3f3f3f3

Project Euler: Problem 14 Longest Collatz sequence

The following iterative sequence is defined for the set of positive integers: n → n/2 (n is even) n → 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can b

UVA_694:The Collatz Sequence

Language: C++ 4.8.2 #include<stdio.h> int main(void) { long long int m, n, copy_m; int count = 1; int number = 0; while(1) { scanf("%lld%lld", &m, &n); // uva要求用%lld读入有符号长整型 if(m < 0 && n < 0) break; count = 1; copy_m

UVA 10479 The Hendrie Sequence 规律

题目大意:一个序列,刚开始由0变到了1,接着往后一个个变化下去 变化的规则是,如果当前数是k,就在这个序列的最后面加上k-1个0,再加上k+1 现在问这个序列的第n个数是多少 解题思路:这是有规律的,第2的k次方个数刚好是k 如果当前数是k,且k刚好是2的n次方,那么这个数前面就有n-1个0,n-2个1,n-3个02组合,以此类推 如果要求第n个数是多少,只需要找到n是哪个k之前的,然后依照上面的规律依次递归下去即可 #include<cstdio> #include<cstring&g

【UVA】10534 - Wavio Sequence(LIS最长上升子序列)

这题一看10000的数据量就知道必须用nlog(n)的时间复杂度. 所以特意去看了最长上升子序列的nlog(n)的算法. 如果有2个位置,该位置上的元素为A[i]和A[j],并且他们满足以下条件: 1.dp[i] = dp[j]    (dp[x]代表以x结尾的最长上升子序列长度) 2.A[i] < A[j] 3.i < j 那么毫无疑问,选择dp[i] 一定优于选择dp[j] 那么我们可以利用g[i]表示长度为i的序列的最后一个元素的最小值. 每次拿到一个A[i],在g[i]里面寻找到一个元

UVA 1594:Ducci Sequence (模拟 Grade E)

题意: 对于一个n元组(a0,a1,...),一次变换后变成(|a0-a1|,|a1-a2|,...) 问1000次变换以内是否存在循环. 思路: 模拟,map判重 代码: #include <cstdio> #include <cstring> #include <map> #include <cmath> #include <algorithm> using namespace std; struct Node{ int a[16]; int