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;
}


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

UVa 11371 Number Theory for Newbies (water ver.)

11371 - Number Theory for Newbies Time limit: 1.000 seconds  http://uva.onlinejudge.org/index.php?op...
  • synapse7
  • synapse7
  • 2013年11月17日 23:15
  • 1177

UVa 11064 - Number Theory

题目:求给顶一个数n,的所有的1 ≤ m ≤ n的m,使得gcd(m,n)≠ 1 且 gcd(m,n)≠ m。 分析:数论,素数筛法,欧拉函数。              设pi为n的第i个素数因,k...
  • mobius_strip
  • mobius_strip
  • 2014年10月28日 09:12
  • 1354

UVA, 11064 Number Theory

题意:GCD(m,n)是指n和m的最大公约数,现在给你个数n,找所有比n小的m,m满足GCD(m,n)!=1且GCD(m,n)!=m,就是让你找所有既不是因子也不是互质的数。比如6的因子是1,2,3,...
  • s1054436218
  • s1054436218
  • 2017年03月24日 14:28
  • 129

UVA 11064 -- Number Theory

1.题目大意:For each number output the number of numbers m, 1 ≤ m ≤ n, where gcd(m,n) ≠ 1 and gcd(m,n) ≠ ...
  • u011346442
  • u011346442
  • 2015年01月04日 10:58
  • 364

poj 2689 Prime Distance(筛素数)

Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10806   Accepted: ...
  • u010527492
  • u010527492
  • 2014年01月01日 10:59
  • 472

UVA 11371

#include #include #include #include #include using namespace std; static const char c_zer...
  • dma1982
  • dma1982
  • 2012年03月10日 19:43
  • 132

POJ 1528 Perfection(我的水题之路——因子之和)

Perfection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8608   Acc...
  • shiow1991
  • shiow1991
  • 2012年01月30日 18:07
  • 769

poj2689Prime Distance(数论)

题目链接 啊哈哈,点我 题目: Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:...
  • u014303647
  • u014303647
  • 2014年07月23日 20:15
  • 578

POJ268————Prime Distance(数论,素数筛)

题目: Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16193   Acce...
  • say_c_box
  • say_c_box
  • 2016年07月19日 14:49
  • 397

HDOJ 1323 Perfection(简单题)

Problem Description From the article Number Theory in the 1994 Microsoft Encarta: “If a, b, c are i...
  • qq_26525215
  • qq_26525215
  • 2016年04月08日 00:59
  • 727
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 11371 - Number Theory for Newbies
举报原因:
原因补充:

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