[Algorithm] Calculate the square of 1 number of n numbers 1
Threads:
For the S = 111…11 (n digits 1, decimal system), S ^ 2 properties.
Input
– First line: number of tests k (to<=40).
– k next line, Each line contains the number n – number of digits 1 window. (1 <= n <= 1000000)
Output
– For each test burn results 1 current.
Example
Input:
2
1
2
Output:
1
121
Solution:
We see symmetrical KQ 123…n…321. VD n = 3, the 111 ^ 2 = 12321
But notice with n = 10, the symmetrical shape of this does not seem quite right.
CEO: with n = 13 ie we 1111111111111 ^ 2.
1111111111111 1111111111111 1111111111111 1111111111111 + 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 ========================= 1234567901234320987654321
We see the rules of symmetry is gone. And I had an intention that this. I just write as symmetrical go, then do the following:
I will perform in each number from right to left, and we have the following code:
#include <iostream> #include <string> using namespace std; int main() { int k, n; cin>>k; for (int i=0; i<k; i++) { cin>>n; string s = ""; int temp = 0; // temp la phan du khi chi so cho 10. VD 13 thi temp la 1. int j = 1, ji = 1; // bat dau viet tu phai sang trai while (j>0) { // cong tung cap nhu hinh ((j+temp)%10) //sau do chen vao giua s.insert(0, 1, (char)((j+temp)%10+'0')); temp = (j+temp)/10; if (j==n) ji = -1; // quay nguoc lai khi du n so j += ji; } cout<<s<<endl; } return 0; }
After obtaining the code above, KQ is a number drawn following rules:
Sequence divided 3 header section is structured as follows :
+/ striving: 123456790123456790123456790… ie repetition of paragraphs 123456790 (A-1)/9 = N1 times.
+ the middle section: 123…x…32 with x = n – 9*n1.
+/ end: n1 repeat visits 098765432 and have some 1 at last. For simplicity let's just for the middle section is symmetrically shaped ie 12321 Then we inserted into the front end of 1 at the end.
#include <iostream> #include <string> using namespace std; int main() { int k, n; cin>>k; for (int i=0; i<k; i++) { cin>>n; string s = "", s1 = "123456790", s2 = "098765432"; int n1 = (n-1)/9, n2 = n - 9*n1; // doan giua for (int i=1; i<=n2; i++) s.insert(s.length(), 1, (char)(i + '0')); for (int i=n2-1; i>0; i--) s.insert(s.length(), 1, (char)(i + '0')); // neu n tu 10 tro len if (n>9) { // doan dau for (int i=0; i<n1; i++) s.insert(0, s1); // doan cuoi for (int i=0; i<n1; i++) s.insert(s.length()-1, s2); } cout<<s<<endl; } return 0; }
KQ illustrate entering k = 13 and 5 paint (14, 37, 30, 113, 352) respectively as shown in Figure.
Recent Comments