int isSatisfyingCondition(long long int n) { int *arr,len,start,end,counter; long long int n1,n2,i; len=countDigits(n); arr=(int*)malloc(sizeof(int)*len); arr=formArray(n); bubbleSortDescending(arr,len); n2=formNumber(arr,len); bubbleSortAscending(arr,len); n1=formNumber(arr,len); free(arr); start=(int)pow(n1,1/3.0); start--; end=(int)pow(n2,1/3.0); end++; counter=0; for(i=start;i<=end;i++) { if(containsSameDigits(i*i*i,n) && isPerfectCube(i*i*i)) { printf("%lld\n",(i*i*i)); counter++; } } if(counter==5) return 1; return 0; }
int main() { FILE *fin = fopen("contact.in", "r"); FILE *fout = fopen("contact.out", "w"); int i, j, begin, end, top, record[200001], count, res[13][4096]; fscanf(fin, "%d %d %d", &begin, &end, &top); char buffer[1024]; count = 0; while (fscanf(fin, "%s", buffer) > 0) { for (i = 0; i < strlen(buffer); i++) record[count++] = buffer[i] - '0'; } for (i = 0; i < count; i++) { for (j = begin; j <= end; j++) { if (i + j > count) break; int temp = formNumber(record+i, j); res[j][temp]++; } } struct mark contact[5000]; count = 0; for (i = begin; i <= end; i++) { for (j = 0; j < 4096; j++) { if (res[i][j] != 0) { contact[count].length = i; contact[count].value = j; contact[count++].count = res[i][j]; } } } sortInsertion(contact, count); int next, num; i = j = 0; next = 1; while (i < top && j < count) { if (next) { fprintf(fout, "%d\n", contact[j].count); next = 0; num = 0; } char output[13]; formString(contact[j].length, contact[j].value, output); fprintf(fout, "%s", output); num++; if (contact[j+1].count != contact[j].count) { i++; next = 1; fprintf(fout, "\n"); }else { if (num == 6) { fprintf(fout, "\n"); num = 0; }else fprintf(fout, " "); } j++; } fclose(fin); fclose(fout); }