A - Bài toán trên là đề bài thi học sinh giỏi toán quốc gia, khối lớp 9, năm 1979.
B - Bài toán này có thể viết bằng nhiều NNLT, có thể tham khảo thêm ở : chuyển chuỗi thành số
C - code viết bằng c#
Code:
using System;
//biên dịch dòng lệnh command mode
//csc TaySon2.cs
namespace TaySon{
class Program{
//const int A = 0, G = 1, N = 2, O = 3, Q = 4, R = 5, S = 6, T = 7, U = 8, Y = 9;
static int Quang(int[] p){
return 10000 * p[4] +
1000 * p[8] +
100 * p[0] +
10 * p[2] +
p[1];
}
static int Trung(int[] p){
return 10000 * p[7] +
1000 * p[5] +
100 * p[8] +
10 * p[2] +
p[1];
}
static int TaySon(int[] p){
return 100000 * p[7] +
10000 * p[0] +
1000 * p[9] +
100 * p[6] +
10 * p[3] +
p[2];
}
static void Main(){
int[] p = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//int k = 0;
string digits = "AGNOQRSTUY"; //set of "QUANG" + "TRUNG" + "TAYSON"
Console.WriteLine("\tInput:\nQUANG + TRUNG = TAYSON\n");
//
do {
//k++;
if (p[4] != 0 && p[7] != 0){ //Giảm tính toán : 2 * 9!
int x = Quang(p), y = Trung(p), z = TaySon(p);
if( x + y == z){
Console.WriteLine("\tOutput:\n{0} + {1} = {2}", x, y, z);
Console.Write("\tWith:");
for (int i = 0; i < 10; i++) Console.Write("\n{0} = {1}", digits[i], p[i]);
}
}
}
while (hoanVi(p));
//Console.WriteLine("\nDem = {0}", k);
Console.Write("\n\nDone, bye"); Console.ReadLine();
}
static bool hoanVi(int[] arr){
int n = arr.Length, k = -1;
for (int i = 1; i < n; i++)
if (arr[i - 1] < arr[i]) k = i - 1;
if (k == -1){
for (int i = 0; i < n; i++) arr[i] = i;
return false; //Done
}
//Next
int j = k + 1;
for (int i = j; i < n; i++)
if (arr[k] < arr[i]) j = i;
//swap
int t = arr[k]; arr[k] = arr[j]; arr[j] = t;
Array.Reverse(arr, k + 1, n - (k + 1));
return true;
}
}
}
Bạn có thể test chạy xem kết quả ở : Solution
Bookmarks