UVa 11371 - Number Theory for Newbies

原创 2015年07月08日 20:36:50

題目:給你一個數字n,將裡面每位的數重新組合形成a,b,使得a-b最大且是9的倍數。

分析:數論。題目要求a,b和n的位數相同,不能有前導0。

            定理1:交換一個數字中的某兩個位的數,形成的新數組和原數字之差是9的倍數;

            證明1:設數字為abc..i..j...xwz,其中每个字母代表一个位,对应值可以相同,

                          那么随意交换两位i,j得到的新数字为abc..j..i..xwz,做差为9..90..0 *(i-j),

                          所以一定是9的倍数,得证。

           通過上面定理可以繼續證明,任意交換任意位數字形成的新數字和原數字的差是9的倍數;

           所以取a為最大組合,即遞減序,b為遞增序即可;

           但是,這裡要求位數相同,所以b取首尾不是0的數字的最小值,先取遞增序,

           然後,交換第一個非0數和首位的1即可。

說明:╮(╯▽╰)╭。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

bool cmp1(char a, char b)
{
	return a < b;
}

bool cmp2(char a, char b)
{
	return a > b;
}

int main()
{
	char buf[31];
	while (gets(buf)) {
		int len = strlen(buf);
		long long A = 0LL, B = 0LL;
		sort(buf, buf+len, cmp1);
		if (buf[0] == '0') {
			for (int i = 0; i < len; ++ i)
				if (buf[i] != '0') {
					swap(buf[i], buf[0]);
					break;
				}
		}
		for (int i = 0; i < len; ++ i)
			A = A*10LL + buf[i]-'0';
		sort(buf, buf+len, cmp2);
		for (int i = 0; i < len; ++ i)
 			B = B*10LL + buf[i]-'0';
 		printf("%lld - %lld = %lld = 9 * %lld\n",B,A,B-A,(B-A)/9LL);
	}
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数学专项number_theory:UVa 718

很容易判断哪些电梯可以到达A,哪些电梯可以到到B。然后两两判断电梯是否可以在某一层相连,即建个图。这里就需要解一个具有两个方程的模方程组了。 这里,我分了两种情况。首先是当两者的X互质,即模互质时可...

Volume 1. Elementary Problem Solving :: Maths - Number Theory Uva 575,10110,550,568,408,10061,10392

刘汝佳 算法入门 第一版 Uva题目集合(六)

数学专项number_theory:UVa 11768

这道题之前做过一次,在WA了数炮之后,就把这题放下了。 这几天找了本《数论概论》稍稍系统的学了下,今天把这题重新找了出来做一做。结果从下午3点做到晚上9点,自己手写了数据生成器和一个暴力的程序,一步一...

A short course in python for number theory

  • 2010年01月08日 05:53
  • 149KB
  • 下载

Installing LAMP On Ubuntu For Newbies

In this guide I will show you how to install a LAMP system. LAMP stands for Linux, Apache, MySQL, PH...

Switching From Windows to Nix or a Newbie to Linux – 20 Useful Commands for Linux Newbies

So you are planning to switch from Windows to Linux, or have just switched to Linux? Oops!!! what I...

OpenBSD_for_newbies(PDF)

  • 2008年04月15日 23:48
  • 104KB
  • 下载

MQL languge for newbies

  • 2009年02月27日 02:52
  • 816KB
  • 下载

【HDU2685】I won't tell you this is about number theory

gcd结论题
  • sdfzchy
  • sdfzchy
  • 2017年07月21日 15:05
  • 151

ACdream 1114 Number theory 莫比乌斯反演 或 容斥原理

题意:给n个数,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 11371 - Number Theory for Newbies
举报原因:
原因补充:

(最多只允许输入30个字)