CodeForces 374A. Divisible by Seven
2013-12-25 11:21
399 查看
构造。。。。
A. Divisible by Seven
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You have number a, whose decimal representation quite luckily contains digits 1, 6, 8, 9. Rearrange the digits in its decimal representation so that the
resulting number will be divisible by 7.
Number a doesn't contain any leading zeroes and contains digits 1, 6, 8, 9 (it also can contain another digits). The resulting number also mustn't contain
any leading zeroes.
Input
The first line contains positive integer a in the decimal record. It is guaranteed that the record of number a contains
digits: 1, 6, 8, 9. Number a doesn't contain any leading zeroes. The decimal representation of number a contains
at least 4 and at most 106 characters.
Output
Print a number in the decimal notation without leading zeroes — the result of the permutation.
If it is impossible to rearrange the digits of the number a in the required manner, print 0.
Sample test(s)
input
output
input
output
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
bool sh[10010000];
int main()
{
string str;
int cnt = 0, mod = 0;
cin >> str;
int n = str.size();
memset(sh, true, sizeof(sh));
bool n1 = false, n6 = false, n8 = false, n9 = false;
for (int i = 0; i < n; i++)
{
int b = str[i] - '0';
if (b == 0)
{
sh[i] = false;
cnt++; continue;
}
if (b == 1 && !n1)
{
n1 = true;
sh[i] = false;
continue;
}
if (b == 6 && !n6)
{
n6 = true;
sh[i] = false;
continue;
}
if (b == 8 && !n8)
{
n8 = true;
sh[i] = false;
continue;
}
if (b == 9 && !n9)
{
n9 = true;
sh[i] = false;
continue;
}
mod = (mod * 10 + b) % 7;
}
mod = (mod * 10000) % 7;
for (int i = 0; i < n; i++)
{
if (sh[i]) putchar(str[i]);
}
if (mod == 0)
{
printf("1869");
}
else if (7 - mod == 1)
{
printf("1968");
}
else if (7 - mod == 2)
{
printf("1689");
}
else if (7 - mod == 3)
{
printf("6198");
}
else if (7 - mod == 4)
{
printf("1698");
}
else if (7 - mod == 5)
{
printf("1986");
}
else if (7 - mod == 6)
{
printf("1896");
}
while (cnt--)
{
putchar('0');
}
///system("pause");
return 0;
}
A. Divisible by Seven
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You have number a, whose decimal representation quite luckily contains digits 1, 6, 8, 9. Rearrange the digits in its decimal representation so that the
resulting number will be divisible by 7.
Number a doesn't contain any leading zeroes and contains digits 1, 6, 8, 9 (it also can contain another digits). The resulting number also mustn't contain
any leading zeroes.
Input
The first line contains positive integer a in the decimal record. It is guaranteed that the record of number a contains
digits: 1, 6, 8, 9. Number a doesn't contain any leading zeroes. The decimal representation of number a contains
at least 4 and at most 106 characters.
Output
Print a number in the decimal notation without leading zeroes — the result of the permutation.
If it is impossible to rearrange the digits of the number a in the required manner, print 0.
Sample test(s)
input
1689
output
1869
input
18906
output
18690
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
bool sh[10010000];
int main()
{
string str;
int cnt = 0, mod = 0;
cin >> str;
int n = str.size();
memset(sh, true, sizeof(sh));
bool n1 = false, n6 = false, n8 = false, n9 = false;
for (int i = 0; i < n; i++)
{
int b = str[i] - '0';
if (b == 0)
{
sh[i] = false;
cnt++; continue;
}
if (b == 1 && !n1)
{
n1 = true;
sh[i] = false;
continue;
}
if (b == 6 && !n6)
{
n6 = true;
sh[i] = false;
continue;
}
if (b == 8 && !n8)
{
n8 = true;
sh[i] = false;
continue;
}
if (b == 9 && !n9)
{
n9 = true;
sh[i] = false;
continue;
}
mod = (mod * 10 + b) % 7;
}
mod = (mod * 10000) % 7;
for (int i = 0; i < n; i++)
{
if (sh[i]) putchar(str[i]);
}
if (mod == 0)
{
printf("1869");
}
else if (7 - mod == 1)
{
printf("1968");
}
else if (7 - mod == 2)
{
printf("1689");
}
else if (7 - mod == 3)
{
printf("6198");
}
else if (7 - mod == 4)
{
printf("1698");
}
else if (7 - mod == 5)
{
printf("1986");
}
else if (7 - mod == 6)
{
printf("1896");
}
while (cnt--)
{
putchar('0');
}
///system("pause");
return 0;
}
相关文章推荐
- codeforces_230_div2解题报告
- Codeforces 570 A. Elections
- CodeForces 670E Correct Bracket Sequence Editor
- CodeForces 368C Sereja and Algorithm(dp)
- CodeForces 804E. The same permutation
- 【codeforces 796C】Bank Hacking(用一些技巧来代替multiset)
- Codeforces 394 B. Very Beautiful Number
- codeforces 232D. Fence
- CodeForces 599B Spongebob and Joke
- codeforces 702C Cellular Network
- Codeforces 3B Lorry
- 【codeforces 755E】PolandBall and White-Red graph
- codeforces div2 round#230 D
- Codeforces 570A
- CodeForces 593A 2Char
- 【Codeforces】716D Complete The Graph
- Codeforces:"North-East"
- 【codeforces 796D】Police Stations
- CodeForces 370C Mittens
- CodeForces 161D Distance in Tree(树形DP)