I've created a solution to week 3's tideman problem which is entirely logically correct. Unfortunately, I had to dodge the standard solution by commenting out parts of a function and altering its parameters, so my solution cannot be accepted by check50. The problem i'm facing is using arrays in functions. C implicitly converts arrays when they are used as parameters in functions, so how am I supposed to code with a function such as "int record_preferences(int ranks[])". What does ranks[] even mean? An array? An element of the array? I altered the parameters once to "int record_preferences(int k, int ranks[k])" and called it with "record_preferences(j, ranks[j])" so I could actually use an element of the array, but that produced errors. Before anyone mentions pointers - they are only taught in week 4 - I believe this problem should be solvable without pointers . // Query for votes for (int i = 0; i < voter_count; i++) { // ranks[i] is voter's ith preference int ranks[candidate_count]; // Query for each rank for (int j = 0; j < candidate_count; j++) { string name = get_string("Rank %i: ", j + 1); if (!vote(j, name, ranks[j])) { printf("Invalid vote.\n"); return 3; } else { ranks[j] = save; //Record_preferences should start here. for(int k = 0; k < candidate_count; k++) { int c = j; if(ranks[j] == k) { continue; } if(j > 0) { while(c > 0) { if(k == ranks[c-1]) { --c; goto next; } --c; } ++preferences[ranks[j]][k]; next: continue; } else { ++preferences[ranks[j]][k]; } } //I commented out the record_preferences() function. //record_preferences(); } } printf("\n"); } add_pairs(); sort_pairs(); lock_pairs(); print_winner(); return 0; }