本题是浙江理工大学ACM入队200题第二套中的H题
我们先来看一下这题的题面.
由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习惯,尤其是要利用好输入和输出样例.
- 样例相当于给你举了个具体的例子,可以帮助你更好的理解题目
- 样例会告诉你输入和输出的格式,你必须要在程序里以这样的格式输入和输出,否则会出问题
- 样例可以在你本地写完代码之后用作测试,来检查你的代码能否正常地运行(不过样例运行正确并不代表完全对了,可能输入其他的数据会出现别的问题)
输入1个3位数,分离出它的百位、十位和个位,反转后输出
输入1个3位整数
输出3位整数的反转数
250
052
分离出各位数字可以用取余和除数
注意在C语言里,2个整数相乘除结果还是整数 比如8/3在C语言里结果是2
取余采用符号%
比如8%3的结果应该是2即8除以3后的余数
想要倒序输出3位数,首先我们必须取出这个三位数中的各个位,而这题对于新朋友们来说最难的点可能是取出数字中的各个位了,不过好在仁慈的叶教给出了提示.
我们可以通过对10取余来得到当前数字的个位,对10整除取得当前数字去掉最后一位(即十进制位右移一位)后的数字:
(图片有错别字,左边"正数"应为"整数")
同理也可推出对100取余、对100整除等操作的效果,取n进制的某一位同样也可使用类似的操作完成.
所以对于这题我们只需要通过上述操作的组合取出各个位上的数字,再将其反过来输出即可.
取出各个位上的数字的局部参考代码如下:
int a = n / 100; // 取出百位(如果实在不能直接理解,可看成先/10去掉个位变为两位数(如250->25),再/10去掉新的个位变为1位数(如25->2),这样就是百位了)
int b = n / 10 % 10; // 取出十位(先去/10掉个位(250->25),再取%10新的个位,即十位)
int c = n % 10; // 取出个位
解决了上述的难点之后,有些朋友们就掉坑了.这题的一个坑点就出现在倒序输出上,不过好在可以直接通过样例输入发现这个问题.
这些朋友们的倒序输出的思路是这样的,既然我可以反着十进制的规则取出各个十进制位,那我也可以正着十进制的规则算出倒过来的数,于是他们写出了如下的代码(局部)
int res = c * 100 + b * 10 + a; // 根据十进制的定义求出倒序后的十进制数
这样写在数学上确实没什么大问题,但是注意看这里的输出样例,我们的程序需要实现的是250->052而不是250->52,也就是说在这道题里,不能通过算出倒序后的数这种方式来解决,因为对于一个数字而言,首位的0是会省略的(如果题目要求要没有首位0,那确实可以这么写,因题而异).
这里就体现出了仔细看输入和输出样例的重要性了吧!各位朋友们一定要仔细耐心看题哦!
那怎么办呢,很简单鸭,直接一个一个数字输出不就好了嘛(本质是字符串拼接),局部参考代码如下:
printf("%d%d%d", c, b, a); // 将三个位按逆序逐个输出
下面给出了我自己做这道题时候的完整代码:
(仅作为参考,一定要自己写一下奥,作弊没意思,害人又害己)
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a = n / 100; // 取出百位(如果实在不能直接理解,可看成先/10去掉个位变为两位数(如250->25),再/10去掉新的个位变为1位数(如25->2),这样就是百位了)
int b = n / 10 % 10; // 取出十位(先去/10掉个位(250->25),再取%10新的个位,即十位)
int c = n % 10; // 取出个位
printf("%d%d%d\n", c, b, a); // 将三个位按逆序逐个输出
return 0;
}
其实,在学了循环之后,这道题还可以利用循环逐个取出各个位上的数字.
这种思路的出发点便是%10可以取个位而同时/10可以去个位,所以我们可以通过一个while循环,不断取出个位再去掉个位,将操作前的十位不断移至个位,直到无位可移(即数变为0),此时所有位已经全部倒序取出,循环结束.
参考代码(局部):
int n;
scanf("%d", &n);
do // 必须要用do-while,保证循环至少进行一次,以处理0(当然你用while然后单独加一个特判也是可以的)
{
printf("%d", n % 10); // 取出当前的个位
n /= 10; // 去掉当前已取出的个位,让前面的十位变成个位进行下一次循环中的操作
} while(n) // 即n != 0,n当前还有位未处理
printf("\n");
第4套的问题C是可以通过这种方式解决的(只需要在循环中加一个计数器即可判断位数),这题问的也相对比较多,建议收藏这篇题解,届时如果有问题可以回过来看此段内容,不单独发了.
此外,在学了字符串之后,这道题的逐个取出各个十进制位再逆序完全可以依托字符串的特点,直接将输入作为字符串倒序输出即可解决,这里就只给出参考代码(局部)了,学过字符串的话应该可以立马理解的:
char n[5]; // 注意字符串习惯性开大一点,防止'\0'溢出
scanf("%s", n);
// 普普通通倒序输出字符串,注意别写成i++了
for(int i = strlen(s) - 1; i >=0 ; i--)
{
printf("%c", n[i]);
}
printf("\n");
第4套的问题C也可以通过这种方式解决(字符串的有效长度就是位数).
"正是我们每天反复做的事情,最终造就了我们,优秀不是一种行为,而是一种习惯" ---亚里士多德
这篇题解就到这里了,各位朋友如果有问题欢迎到acm成员群中提问哦!
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
大家好!我对我的:username字段进行了一个小的验证,它应该是4到30个字符。我写了一个验证::length=>{:within=>4..30,:message=>I18n.t('activerecord.errors.range')-我想显示一个错误各种错误的消息(不像,太长或太短),但这里有一个问题-我可以将最小值和最大值都传递给翻译,以便有类似的东西:用户名应该在4到30个字符之间。目前我有:range:"shouldbebetween%{count}and%{count}characters",这显然不起作用(只是为了检查)。是否可以从范围中获取这些值?谢谢大家的指教!
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
我正在使用Enumerizegemhttps://github.com/brainspec/enumerize/它允许我以简单的形式使用漂亮的选择。并且此选择中的所有选项均已翻译。en:enumerize:user:sex:male:'Man'female:'Woman'所以,在我的表单中,我选择了变体“男人”和“女人”。当我用“男人”值保存记录时,我得到了“男性”值的性别属性。现在我想在显示页面上将该值显示为“Man”,但是=@user.sex输出为'male'而不是'Man' 最佳答案 我可能会使用.text方法(您可以通过使用
我想在格式化数字时每隔三个字符放置一个空格。根据这个规范:it"shouldformatanamount"dospaces_on(1202003).should=="1202003"end我想出了这段代码来完成这项工作defspaces_onamountthousands=amount/1000remainder=amount%1000ifthousands==0"#{remainder}"elsezero_padded_remainder='%03.f'%remainder"#{spaces_onthousands}#{zero_padded_remainder}"endend所以我
所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。
当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在