首页 > 其他分享 >UVA694 The Collatz Sequence 题解

UVA694 The Collatz Sequence 题解

时间:2022-12-25 08:11:30浏览次数:60  
标签:UVA694 题目 题解 Collatz while isdigit

题目传送门

题目大意

根据题目中的规定生成序列,问有多少次计算;注意输入以“\(\ -1\) \(\ -1\)”结尾。

解题思路

按照题目中所说的进行模拟。

在保证 \(a\) 不大于 \(l\) 和 \(a\) 不等于 \(\ 1\) 的前提下:

如果 \(a\) 是偶数,那么\(a\)的值变为 $ \Large{\frac{a}{2}}$;

如果 \(a\) 是奇数,那么\(a\)的值变为 \(\ 3\times a+1\);

如果 \(a\) 大于 \(l\) 或者 \(a\) 等于 \(\ 1\) 了,就跳出循坏。

注意每计算一次 \(ans++\);每计算完一组要重置计数器。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
template <class T> void r(T&x){
	x = 0; int w = 0; char g = getchar();
	while(!isdigit(g)) {
		w = (g == '-'); g = getchar();
	} while(isdigit(g)) {
		x = (x << 3) + (x << 1) + (g xor 48); g = getchar();
	} x = w?-x:x; return;
}
ll a,l,ans=1,i=0;
int main(){
	while(a!=-1&&l!=-1){ 
		r(a),r(l);
		i++;
		if(a==-1&&l==-1) break;
		cout<<"Case "<<i<<": A = "<<a<<", limit = "<<l<<", number of terms = "; 
		while(a<=l&&a!=1){ 
			if(a%2==0){
				a/=2;
				ans++;
			}	
			else{
				if(a*3+1<=l){
					a=a*3+1;
					ans++;
				}	
				else break;
			}
		}
		cout<<ans<<'\n';
		ans=1;
 }
	return 0;
}

注意输出格式!

标签:UVA694,题目,题解,Collatz,while,isdigit
From: https://www.cnblogs.com/zzyblog0619/p/17003660.html

相关文章

  • CF317A Perfect Pair 题解
    题目传送门题目大意给定一对数\(x\)和\(y\),允许把其中的一个数换成\(x+y\),问把\(x\)或\(y\)变成大于或等于\(m\)的数,需要几次操作。解题思路首先可以判断......
  • UVA12459 Bees' ancestors 题解
    题目传送门题目大意雌蜂有一个父亲一个母亲,而雄蜂只有母亲。计算出Willy的祖先中,哪一代有多少祖先。解题思路已知Willy为雄蜂,从Willy开始向前推:有一个母亲(1);......
  • CF334A Candy Bags 题解
    题目传送门题目大意:给你\(n^2\)颗糖,分给\(n\)人,使每个人的权值相等(第\(i\)块的权值为\(i\)),输出第\(i\)个人选的糖果集合,注意题目中说\(n\)为偶数。解题思路......
  • CF465B Inbox (100500) 题解
    题目传送门题目大意有已读或未读的邮件,可以进行以下操作:读完邮件后回到邮件列表;回到列表后选取任意一个未读邮件读;读完一个邮件之后读这个邮件的下一个或者上一个邮......
  • P8752 [蓝桥杯 2021 省 B2] 特殊年份 题解
    题目传送门题目大意输入\(5\)个年份,请计算这里面有多少个千位和十位相等,个位比百位大\(1\)的年份。解题思路将每一个年份按分离数位规则把每一位都分离,赋给\(a,......
  • AT_past202010_b 電卓 题解
    题目传送门题目大意给定\(x\)和\(y\),求$\dfrac{x}{y}$。舍弃小数点后第三及以下位。解题思路首先判断$\dfrac{x}{y}$是否可以成立,也就是判断\(y\)是否等于......
  • AT_pakencamp_2021_day2_b Pasokon Power 题解
    题目传送门题目大意输入\(a\)和\(b\),输出\(a^2\cdotb\)的值。解题思路计算\(a^2\cdotb\)的值。用pow函数,表示\(a\)的\(b\)次幂,再乘\(b\),最后不要忘了......
  • AT_pakencamp_2020_day2_a Participants 题解
    题目传送门题目大意集训有\(2\)天,\(2\)天中参加\(1\)天以上的人数最少是多少,最多是多少?解题思路参加一天以上的人数最少就是\(A\)和\(B\)的最大值,而最多就是......
  • T_pakencamp_2021_day2_a Participants 2 题解
    题目传送门题目大意输出帕研集训2021的参加人数。解题思路输出51。代码C++:#include<iostream>intmain(){::std::cout<<51<<::std::endl;retur......
  • AT_pakencamp_2019_day3_b 多数決 题解
    题目传送门题目大意给定\(n\)个字符串,如果black比white的数量多,就输出black,否则输出white。解题思路如果第\(i\)个字符串是black,black的数量加一,如果是wh......