Advertisement
Guest User

Untitled

a guest
Dec 6th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <math.h>
  6.  
  7. #define MAX_LENGTH 1000
  8.  
  9. int cmp(const void* a, const void* b) {
  10.     char* f = (char*)a;
  11.     char* s = (char*)b;
  12.     if (strlen(f) == strlen(s)) {
  13.         while (*f == *s) {
  14.             f++;
  15.             s++;
  16.         }
  17.         return *f - *s;
  18.     }
  19.     return strlen(f) - strlen(s);
  20. }
  21.  
  22. char* make_palindrome(char* word, int k, char add) {
  23.     char* c = malloc(sizeof(char) * 1000 + 2 * k);
  24.     for (int j = 0; j < k; j++) {
  25.         c[j] = add;
  26.     }
  27.     strcpy(c + k, word);
  28.     char* p = malloc(k * sizeof(char) + 1);
  29.     for (int i = 0; i < k; i++) {
  30.         p[i] = add;
  31.     }
  32.     p[k] = '\0';
  33.     strcat(c + k + strlen(word), p);
  34.     return c;
  35. }
  36.  
  37. int main() {
  38.     int n;
  39.     scanf("%d", &n);
  40.  
  41.     char palindromes[MAX_LENGTH][1000];
  42.  
  43.     int m = 0;
  44.  
  45.  
  46.  
  47.     char even[500][32] = {{"aa"}, {"bb"}};
  48.     char odd[500][32] = {{"a"}, {"b"}};
  49.  
  50.     int q = 1;
  51.         char temp[500][32];
  52.         char temp2[500][32];
  53.     for (int j = 0; j < 6; j++) {
  54.         int l = 0;
  55.         for (int i = 0; i < pow(2, q); i++) {
  56.             strcpy(temp[l], make_palindrome(even[i], 1, 'a'));
  57.             strcpy(temp[l + 1], make_palindrome(even[i], 1, 'b'));
  58.             strcpy(temp2[l], make_palindrome(odd[i], 1, 'a'));
  59.             strcpy(temp2[l + 1], make_palindrome(odd[i], 1, 'b'));
  60.             l += 2;
  61.         }
  62.         for (int i = 0; i < pow(2, q + 1); i++) {
  63.             strcpy(even[i], temp[i]);
  64.             strcpy(odd[i], temp2[i]);
  65.             strcpy(palindromes[m++], temp[i]);
  66.             strcpy(palindromes[m++], temp2[i]);
  67.         }
  68.         q++;
  69.         memset(temp, 0, sizeof(temp));
  70.         memset(temp2, 0, sizeof(temp2));
  71.     }
  72.  
  73.  
  74.     strcpy(palindromes[m++], "");
  75.     strcpy(palindromes[m++], "a");
  76.     strcpy(palindromes[m++], "b");
  77.     strcpy(palindromes[m++], "bb");
  78.     strcpy(palindromes[m++], "aa");
  79.  
  80.     qsort(palindromes, m, 1000, cmp);
  81.  
  82.      for (int i = 0; i < n; i++) {
  83.             printf("%4d. %s\n", i + 1, palindromes[i]);
  84.         }
  85.  
  86.  
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement