POJ 2764 数根

打印月历 题目来源 百练 打印月历 总时间限制: 1000ms 内存限制: 65536kB 描述 给定年月,打印当月的月历表。 输入 输入为一行两个整数,第一个整数是年份year(1900 ≤ year ≤ 2099),第二个整数是月份month(1 ≤ month ≤ 12),中间用单个空格隔开。 输出 输出为月历表。月历表第一行为星期表头,如下所... 阅读详情
总时间限制:
1000ms
内存限制:
65536kB
描述

数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。

比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。

输入
一个正整数(小于101000)。
输出
一个数字,即输入数字的数根。
样例输入
24
样例输出
6
来源
翻译自 Greater New York 2000 的试题
思路

暴力的话绝对会超时吧。。(我没尝试我不知道)。。
题目是不断的每一位上的数字求和,直到变为1位数,即大于等于0小于10. 假设数abc=100∗a+10∗b+c=a+b+c+99∗a+9∗babc = 100 * a + 10 * b + c = a + b + c + 99 * a + 9 * babc=100∗a+10∗b+c=a+b+c+99∗a+9∗b,

  • 若 a+b+c&lt;10a + b + c &lt; 10a+b+c<10,数根 = a+b+c=(abc−1)%9+1a + b + c = (abc - 1 ) \% 9 + 1a+b+c=(abc−1)%9+1 (减一加一是为了处理a+b+c = 9的情况)
  • 若a+b+c&gt;=10a + b + c &gt;= 10a+b+c>=10:
  • 记 a+b+ca + b + ca+b+c 表示为 dedede,de=10∗d+e=d+e+9∗dde = 10 * d + e = d + e + 9 * dde=10∗d+e=d+e+9∗d,则d+e=de−9∗d=(a+b+c−1)%9+1=(abc−1)%9+1d + e = de - 9 * d = (a + b + c - 1) \% 9 + 1 = (abc - 1) \% 9 + 1d+e=de−9∗d=(a+b+c−1)%9+1=(abc−1)%9+1

可推广至任意位数。


九余数定理

说的是:如果一个数的各个数位上的数字之和能被9整除,那么这个数能被9整除;如果一个数各个数位上的数字之和被9除余数是几,那么这个数被9除的余数也一定是几。
记数根为drdrdr,一个数可以表示为
x=∑i=0n(ai∗10i)x = \sum_{i = 0}^n(a_i * 10 ^ i) x=i=0∑n​(ai​∗10i)
因为 10i%9=(1+9999...(i−1个))%9=110^i \% 9 = (1 + 9999...(i - 1个) ) \% 9 = 110i%9=(1+9999...(i−1个))%9=1,所以 x%9=(∑i=0nai)%9=f(x)%9x \% 9 = (\sum_{i = 0}^na_i) \% 9 = f(x) \% 9x%9=(∑i=0n​ai​)%9=f(x)%9,其中f(x)=∑i=0naif(x) = \sum_{i = 0}^na_if(x)=∑i=0n​ai​.
则f(x)%9=f(f(x))%9...=dr%9f(x) \% 9 = f(f(x) )\% 9... = dr \% 9f(x)%9=f(f(x))%9...=dr%9
而 dr∈[0,9],f(x)∈[0,8]dr \in [0,9],f(x) \in [0,8]dr∈[0,9],f(x)∈[0,8],只要处理f(x)%9==0f(x) \% 9 == 0f(x)%9==0的情况就好了,同上采用减一加一的办法。
dr=(f(x)−1)%9+1=(sum−1)%9+1dr = (f(x) - 1) \% 9 + 1 = (sum - 1 ) \% 9 + 1dr=(f(x)−1)%9+1=(sum−1)%9+1


AC代码如下:

#include <stdio.h>
#include <stdlib.h>
#include<cstring>
using namespace std;

int main()
{
	char a[1010];
	while (gets(a) && a[0] != 0)
	{
		int ans = 0;
		for (int i = 0; i < strlen(a); ++i) {
			ans += a[i] - '0';
		}
	ans = (ans - 1) % 9 + 1;
	printf("%d\n", ans);
	}
	return 0;
}
利用Civil3D装配设计器(SAC)建设高度形状自适应挡土墙 之前的模型都是点线,最后加一个形状,形成面。再根据现场测得的挡土墙的墙脚的点生成中心线(alignment),在中心线的基础上生成在现有地面(existing ground level)的高程(profile)。简单的说,该墙的墙趾啊,墙踵啊,基底下面那个把儿啊,都是随着高度变化的,而高度是随着下面这个高程图变化的。接着出现角度和Y的文本框,角度92,y 值随便写一个,然后重要的是,高程目标选路面(优先于Y值)。意思是P2的高度,也就是路面的高程,减去P10,墙脚高程,再减去墙脚埋进地里的深度0.8m。 阅读详情

相关推荐

半桥LLC谐振变换器及同步整流MATLAB仿真(二)

接上文,半桥LLC谐振变换器及同步整流MATLAB仿真

qq_55203246的博客 4328

poj2764 树根

题目见此:http://poj.grids.cn/practice/2764 描述 数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12

软件与编程的零零碎碎 2165

【电磁场计算】磁偶极子在外磁场中的受力

最近在总结电磁场计算公式的时候发现,关于磁偶极子受力的计算公式,在不同文献中的说明有点出入,在此特地写一篇博客澄清一下。

sky4403的博客 7462

poj2764 The xor-longest Path(Trie)

题意 一颗树n个节点,每个边有个权值,在树上找一条简单路径,使得这条路径上的边权异或值最大。   题解 前缀异或和+trie 设d[x]=d[fa[x]] xor e[k].c,这样做的好处是可以很方便的求出两点路径上边权的异或值wight(x,y)=d[x] xor d[y]。无论是在同一棵子树还是分散在两棵子树中,都适用。 题意就转换成了求n个数中任取两个数的最大异或值。这是个基本题型...

A_Bright_CH的博客 308

EtherCAT-1 技术概述

1.EtherCAT简介①开放的技术EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。②快速性相比传统现场总线,EtherCAT的数据传输速率有了极大的提升,可选10Mbit/s或100Mbit/s,甚至依托补充

tianya_xuan的博客 3543

keil5编程前的工程文件配置,芯片型号支持包配置,用户文件配置,启动文件配置和库函数配置-江科大stm32学习 第一天

1.start文件夹中头文件需要配置路径path,另外user和library也需要,都是同样的操作。如图,在option界面c/c++中,在倒数第二空行的三个点处添加。2.需要设置一个宏,作用是使主函数头文件包含标准库函数,操作如图:复制头文件中8296行的字符串,在option界面的c/c++中第一行define粘贴这个字符串即可。一、首先,下载芯片支持包,选择你自己的器件型号,不懂的可以看我这篇选器件的方法(默认已经注册好用户)点击编译按钮,编译成功后即可在user文件夹里添加main.c正常使用。

weixin_50682964的博客 1951

POJ 2764:数根

#include #include #include using namespace std; int main() { int i,num;char str[1005]; while(gets(str)!=NULL && str[0]!='0') { num=0; for(i=0;istrlen(str);i++)

喜欢计算机是一种病 1005

MATLAB Appdesigner开发独立桌面App全流程(一):以打开串口功能为例介绍Appdesigner的基本使用

本文详细介绍了Appdesigner的基本使用,以串口功能为例介绍按钮回调函数的实现以及控件之间通信的问题

Zhuwany的博客 3万+

poj 2764 # splay tree

呃 希望能用这个换一个好一点的splay板子 #include #include #include using namespace std ; const int MAXN = 100005 ; const int MAXM = 50005 ; const int INF = 0x7FFFFFF ; class SplayTree{ public : SplayTree(){

Samaritan_infi的博客 306

手把手教你学PCIE--所有 PF(Physical Function)共同管理和分配 VF

但具体如何分配和使用 VF 取决于硬件设计、驱动程序配置以及实际应用场景。

MHD0815的博客 1462

RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU等)

本文记录的是改进RT-DETR的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1922

poj1519数字根,根本不用数组解法,只需两变量

网上很多人说这题很水,然后给出遍历数组的算法。其实数字根不用数组就可以算出来,所以输入多长都没关系。代码如下: #include int main(){ char c; int sum=0; while(scanf("%c", &c)&&(c!='0'||sum!=0)){ if(c=='\n'){

hongxingxiaonan的专栏 847

全新YOLO26有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

🔥《2026年YOLO26改进专栏》🔥 🚀持续更新500+最前沿创新改进点(顶会顶刊论文/独家创新策略),涵盖主干网络、各种卷积、注意力机制、检测头等模块,助力科研论文发表与模型性能提升,支持检测/分割/分类任务。订阅即获完整可运行项目,提供专业QQ答疑群,适合科研发论文(SCI/CCF/核心)及工业应用(PCB/医学/遥感检测)。专栏价格将逐步上涨,早订更优惠! ⭐特色:非计算机专业友好、模块可自由组合、全网独家创新;📌适用:研究生大论文和小论文创新、小目标检测、多领域科研应用,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 5107

Bailian2764 数根(POJ NOI0113-50)【数论】

问题链接:POJ NOI0113-50 数根。   数根     总时间限制:  1000ms  内存限制:  65536kB 描述 数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6是一位数,...

海岛Blog 1592

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

百练 2764 数根

# include int main() { char s[10002]; int n; while(scanf("%s",s)==1&&s[0]!='0') { n=0; for(int i=0;s[i]!=0;i++) { n+=s[i]-'0'; } printf("%d\n",(n-1)%9+1); } return

【Zhou Ping 's 解题报告】为了有资格参加亚洲区ACM而奋斗 1665

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【zz】POJ 练习题分类

POJ 练习题分类<br />http://poj .grids.cn<br /><br /><br />POJ 练习题分类<br /> 目录<br /> 1.    基本输入输出    1<br /> 2.    算术逻辑运算    1<br /> 3.    循环    2<br /> 4.    数组    3<br /> 5.    指针    3<br /> 6.    排序    3<br /> 7.    函数    3<br /> 8.    简单计算题    3

zhyx6899的专栏 4200

百练(一~四)题解

百练(一) Bailian2723 不吉利日期(POJ NOI0113-02)【日期计算】 - 海岛Blog - 优快云博客 Bailian2734 十进制到八进制(POJ NOI0113-45)【入门+八进制】 - 海岛Blog - 优快云博客 Bailian2735 八进制到十进制【入门】(POJ NOI0113-46) - 海岛Blog - 优快云博客 Bailian2750 ...

海岛Blog 3895

程序设计入门经典题解(百练篇)

一组入门基础题解,题目来自PKU百练网站,强化程序设计基本功必备。中文问题描述,易于理解。

海岛Blog 4455

百练分类题解

问题链接:HDU1003 Max Sum。 问题简述:参见上述链接。 问题分析:计算最大子段和问题,是一个经典的动态规划问题。 程序说明:这个算法可以说是最为快速简洁的算法,其计算复杂度为O(n),而且没有使用存储空间来存储序列数据。 题记:(略) AC的C++语言程序如下: /* HDU1003 Max Sum */ #include using nam

海岛Blog 5618

1084: 【循环】数根

Description 数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个

AK4TRl的博客 2057

POJ1519数字根 问题

一个正整数的数字根是指该数字各位数字之和,如果和是一个个位数,那么这个数字就是它的数字根,如果和是个两位或多于两位的数字,那么就继续求和直到得到个位数。例如:数字24,把2和4相加,得到6,那么6就是24的数字根;又比如数字39,把数字3和9相加,得到12,因为12时是两位数,所以继续把1和2相加,得到3,于是3就是39的数字根 #include using namespace std; i

huahuahailang的专栏 1555

poj 1519 求数字根和

题意:求数字根和。所谓数字根和就是把一个数的各位数字相加,如果得到的和不是个位数,则再把这个和的各位数字相加……直到最后得到一个个位数为止。最和得到的这个数就叫原数的数字根和。 思路:首先模拟。后来知道一个数的数字根和与此数模9同余。注意输入没有限制范围,必须用数组读入。 #include #include char s[1023]; int main(){ freopen("a.t

dearmango 611

NoiOpenJudge 1.13 数根

50:数根 总时间限制: 1000ms 内存限制: 65536kB 描述 数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因

Immortals 1146

数论常用内容——数根

对于数根可能接触的不多,但是我觉得这里还是应该做一下简单的总结和介绍数根数根(又称数字根Digital root)是自然数的一种性质,每个自然数都有一个数根。数根是将一正整数的各个位数相加(即横向相加),若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止,最后得到的数字就是该数的数根

tick_tock97的博客 1796

数根

数根 描述 数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数

WenOOI的博客 2365

百练OJ2764 :数根(感觉智商被完爆了)

总时间限制: 1000ms 内存限制: 65536kB 描述数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因

homer12的专栏 2348

【编程马拉松】【009-数根】

数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。   比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。现在给你一个正整数

https://github.com/Wang-Jun-Chao 3702
上一篇: POJ2797_最短前缀
下一篇: POJ 2952 循环数
softwareX4
博客等级 码龄9年 21粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值