Advertisement
EckOp

[C#] Số siêu xấu

May 27th, 2016
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.09 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Learn_SuperUglyNumber
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             int number;
  14.             Console.WriteLine("SUPER UGLY NUMBER");
  15.             Console.Write("Please enter a number: ");
  16.             string read = Console.ReadLine();
  17.             number = int.Parse(read);
  18.             int uglyNumber = Ugly_Number(number);
  19.             Console.Write("Ugly Number: " + uglyNumber);
  20.             Console.ReadKey();
  21.         }
  22.         private static int Ugly_Number(int number)
  23.         {
  24.             // cac gia tri dac biet
  25.             if (number < 11)
  26.             {
  27.                 if (number % 2 == 0) return number + 1;
  28.                 else return number + 2;
  29.             }
  30.             else if (number < 33) return 33;
  31.             else if (number < 55) return 55;
  32.             else if (number < 77) return 77;
  33.             else if (number < 99) return 99;
  34.             else if (number == 99) return 111;
  35.             else if (number == 999) return 1111;
  36.             else if (number == 9999) return 11111;
  37.             // lay tong so hang
  38.             int nLen = number.ToString().Length;
  39.             // dua cac so hang vao trong mang
  40.             int[] soHang = new int[nLen];
  41.             int temp_Number = number;
  42.             for (int i = nLen-1; i >= 0; i--)
  43.             {
  44.                 soHang[i] = temp_Number % 10;
  45.                 temp_Number /= 10;
  46.             }
  47.             // lay truc doi xung
  48.             float timTruc = (float)nLen / 2;
  49.             int Truc = Convert.ToInt32(Math.Round(timTruc, MidpointRounding.AwayFromZero));
  50.             int[] sieuXau = new int[Truc];
  51.             // tim so sieu xau
  52.             for (int i = 0; i < Truc; i++)
  53.             {
  54.                 if (i > 0)
  55.                 {
  56.                     if (soHang[i - 1] < sieuXau[i - 1])
  57.                     {
  58.                         sieuXau[i] = 1;
  59.                         continue;
  60.                     }
  61.                 }
  62.                 if (soHang[i] % 2 == 0)
  63.                 {
  64.                     sieuXau[i] = soHang[i] + 1;
  65.                     if (sieuXau[i] > 9) Tang_Gia_Tri(ref sieuXau);
  66.                     if (sieuXau[i] > soHang[i])
  67.                     {
  68.                         for (int j = i + 1; j < Truc; j++) sieuXau[j] = 1;
  69.                         break;
  70.                     }
  71.                 }
  72.                 else sieuXau[i] = soHang[i];
  73.             }
  74.             if (Ghep_Sieu_Xau(sieuXau, nLen) <= number)
  75.             {
  76.                 sieuXau[Truc-1] += 2;
  77.                 Tang_Gia_Tri(ref sieuXau);
  78.             }
  79.             return Ghep_Sieu_Xau(sieuXau, nLen);
  80.         }
  81.         private static int Ghep_Sieu_Xau(int[] sieuXau, int nLen)
  82.         {
  83.             string number = "";
  84.             for (int i = 0; i < sieuXau.Length; i++)
  85.             {
  86.                 number += sieuXau[i];
  87.             }
  88.             char[] newStr = number.ToCharArray();
  89.             if (nLen % 2 == 0) number = number + Reverse(number);
  90.             else number = number = number + Reverse(number.Substring(0, sieuXau.Length - 1));
  91.             if (number == "") number = "0";
  92.             int soSieuXau = int.Parse(number);
  93.             return soSieuXau;
  94.         }
  95.         private static string Reverse( string s )
  96.         {
  97.             char[] charArray = s.ToCharArray();
  98.             Array.Reverse( charArray );
  99.             return new string( charArray );
  100.         }
  101.         private static void Tang_Gia_Tri(ref int[] sieuXau)
  102.         {
  103.             for (int i = sieuXau.Length-1; i >= 0; i--)
  104.             {
  105.                 if (sieuXau[i] > 9)
  106.                 {
  107.                     for (int j = i; j >= 0; j--)
  108.                     {
  109.                         if (sieuXau[j] > 9) sieuXau[j] = 1;
  110.                         else
  111.                         {
  112.                             sieuXau[j] += 2;
  113.                             return;
  114.                         }
  115.                     }
  116.                 }
  117.             }
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement