tyrion

algoritmi.c

Feb 28th, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 26
  4.  
  5. char indexof(char c) {
  6.     return c - 'a';
  7. }
  8.  
  9. char *conta_caratteri(char *parola) {
  10.     char *alfabeto = malloc(N);
  11.     for (int i=0; i < N; ++i)
  12.         alfabeto[i] = 0;
  13.  
  14.     for (char *c = parola; *c != '\0'; ++c)
  15.         alfabeto[indexof(*c)] += 1;
  16.  
  17.     return alfabeto;
  18. }
  19.  
  20.  
  21. int conta_occorrenze(char *paroliere, char *parola) {
  22.     char *a1 = conta_caratteri(paroliere);
  23.     char *a2 = conta_caratteri(parola);
  24.    
  25.     int min;
  26.     int i = 0;
  27.  
  28.     while (a2[i] == 0) ++i;
  29.     min = a1[i] / a2[i];
  30.  
  31.     for (int j = i+1; j < N; ++j) {
  32.         if (a2[j] != 0 && (a1[j] / a2[j]) < min)
  33.             min = a1[j] / a2[j];
  34.     }
  35.     return min;
  36. }
  37.  
  38. void scrivi_r(FILE *fp, int n) {
  39.     if (n == 0) return;
  40.     fputs("algoritmi", fp);
  41.     scrivi_r(fp, n-1);
  42. }
  43.  
  44. void scrivi_file(char *paroliere) {
  45.     int n = conta_occorrenze(paroliere, "algoritmi");
  46.     if (n > 0) {
  47.         FILE *fp = fopen("algoritmi.dat", "wb");
  48.         scrivi_r(fp, n);
  49.         fclose(fp);
  50.     }
  51. }
  52.  
  53. int main() {
  54.     char c[] = "oadpmicasfpjjgklllrgiirpppqaxotbrtasdmi";
  55.     scrivi_file(c);
  56. }
Advertisement
Add Comment
Please, Sign In to add comment