Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
94
Task/Fraction-reduction/C-sharp/fraction-reduction.cs
Normal file
94
Task/Fraction-reduction/C-sharp/fraction-reduction.cs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
using System;
|
||||
|
||||
namespace FractionReduction {
|
||||
class Program {
|
||||
static int IndexOf(int n, int[] s) {
|
||||
for (int i = 0; i < s.Length; i++) {
|
||||
if (s[i] == n) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool GetDigits(int n, int le, int[] digits) {
|
||||
while (n > 0) {
|
||||
var r = n % 10;
|
||||
if (r == 0 || IndexOf(r, digits) >= 0) {
|
||||
return false;
|
||||
}
|
||||
le--;
|
||||
digits[le] = r;
|
||||
n /= 10;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int RemoveDigit(int[] digits, int le, int idx) {
|
||||
int[] pows = { 1, 10, 100, 1000, 10000 };
|
||||
|
||||
var sum = 0;
|
||||
var pow = pows[le - 2];
|
||||
for (int i = 0; i < le; i++) {
|
||||
if (i == idx) continue;
|
||||
sum += digits[i] * pow;
|
||||
pow /= 10;
|
||||
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
static void Main() {
|
||||
var lims = new int[,] { { 12, 97 }, { 123, 986 }, { 1234, 9875 }, { 12345, 98764 } };
|
||||
var count = new int[5];
|
||||
var omitted = new int[5, 10];
|
||||
var upperBound = lims.GetLength(0);
|
||||
for (int i = 0; i < upperBound; i++) {
|
||||
var nDigits = new int[i + 2];
|
||||
var dDigits = new int[i + 2];
|
||||
var blank = new int[i + 2];
|
||||
for (int n = lims[i, 0]; n <= lims[i, 1]; n++) {
|
||||
blank.CopyTo(nDigits, 0);
|
||||
var nOk = GetDigits(n, i + 2, nDigits);
|
||||
if (!nOk) {
|
||||
continue;
|
||||
}
|
||||
for (int d = n + 1; d <= lims[i, 1] + 1; d++) {
|
||||
blank.CopyTo(dDigits, 0);
|
||||
var dOk = GetDigits(d, i + 2, dDigits);
|
||||
if (!dOk) {
|
||||
continue;
|
||||
}
|
||||
for (int nix = 0; nix < nDigits.Length; nix++) {
|
||||
var digit = nDigits[nix];
|
||||
var dix = IndexOf(digit, dDigits);
|
||||
if (dix >= 0) {
|
||||
var rn = RemoveDigit(nDigits, i + 2, nix);
|
||||
var rd = RemoveDigit(dDigits, i + 2, dix);
|
||||
if ((double)n / d == (double)rn / rd) {
|
||||
count[i]++;
|
||||
omitted[i, digit]++;
|
||||
if (count[i] <= 12) {
|
||||
Console.WriteLine("{0}/{1} = {2}/{3} by omitting {4}'s", n, d, rn, rd, digit);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
for (int i = 2; i <= 5; i++) {
|
||||
Console.WriteLine("There are {0} {1}-digit fractions of which:", count[i - 2], i);
|
||||
for (int j = 1; j <= 9; j++) {
|
||||
if (omitted[i - 2, j] == 0) {
|
||||
continue;
|
||||
}
|
||||
Console.WriteLine("{0,6} have {1}'s omitted", omitted[i - 2, j], j);
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue