PTA (Basic Level) Practice (中文)- C语言实现 - 1001 害死人不偿命的(3n+1)猜想
最近接触到一个程序设计能力考试网站:PTA。考试什么的不提,但里面提供了几个级别的程序设计题库确实很赞。我试水了一下乙级题目,确实不错,很考验程序员的程序设计能力。
本来是想着用 PHP 做题的,但里面设计到控制台输入输出内容,我在第一题尝试 PHP 做题未果后,果断切换成 C 实现了。这也让我重新学习了一下 C 语言相关的基础知识。
我写的 PHP 版本(未通过):
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2020/4/15
* Time: 11:07
*/
function calculate_times($num) {
$times = 0;
if ($num > 1000 || $num < 1) {
return $times;
}
if (floor($num) != $num) {
return $times;
}
while ($num != 1) {
if ($times > 10000) {
break;
}
if ($num % 2 == 1) {
$num = (3 * $num + 1) / 2;
} else {
$num = $num / 2;
}
$times += 1;
}
return $times;
}
$num = (int)fgets(STDIN);
$res = calculate_times($num);
fwrite(STDOUT, $res);
不清楚到底是那边不符合要求,我本地控制台(命令行)执行在我看来符合标准的,有知道原因的朋友欢迎留言指点。
C 语言版本(已通过):
#include <stdio.h>
int main() {
int n,step=0,is_odd;
scanf("%d", &n);
while (n != 1) {
is_odd = n % 2;
if (is_odd == 1) {
n = (3 * n + 1) / 2;
} else {
n = n / 2;
}
step += 1;
}
printf("%d", step);
return 0;
}
C 语言属于强类型语言,定义变量、函数都需要声明类型。scanf 在网站上编译执行报了一个 warning,说是没有获取 scanf 的返回值,这个不重要,可以忽略。