Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_LENGTH 30
typedef struct Team_struct{
int num;
int count;
char name[MAX_LENGTH];
struct Team_struct *next;
}teams;
char *titles[10] = {"Team1", "Team2", "Team3", "Team4", "Team5", "Team6", "Team7", "Team8", "Team9", "Team10"};
int arrCount[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int used[100];
int usedTwice[50];
int teamNums[10]= {21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
int utIndex = 0;
int usedIndex = 0;
teams *head = NULL;
void week(int weekNum);
void calculateMatchups(int array[], int week);
void updateTeamCount(int array[], int i);
int getRandom(teams *ptr);
teams * insertNode(void);
teams * createNode(int data);
int checkCount(int num1, int num2);
int a = 0;
int main(void)
{
srand(time(NULL));
int weekNum = 1;
int i;
used[0] = 0;
char* text = "ffoutput.xls";
FILE * output = fopen(text, "w");
head = insertNode();
for(weekNum = 1; weekNum <= 13; weekNum++)
week(weekNum);
for(i = 0; i < 50; i++)
{
printf("Used[%d]: %d UsedTwice[%d]: %d\n", i, used[i], i, usedTwice[i]);
}
while(head != NULL)
{
printf("Team Number: %d\t Team Name: %s\t Team Count: %d\n", head->num, head->name, head->count);
head = head->next;
}
// printf("team1: %d team 2: %d team3: %d team 4: %d\n", team1count, team2count, team3count, team4count);
printf("arrCount:\n");
for(i = 0; i < 10; i++)
printf("[%d]", arrCount[i]);
return 0;
}
int checkCount(int num1, int num2)
{
teams * temp = head;
teams * prev = head;
int ans = 0;
int i,j,k,l,m, n;
for(i = 0; i < 10; i++)
{
if(num1 == teamNums[i])
{
j = i;
i = 10;
k = 1;
}
}
if(k == 1)
{
if(arrCount[j] == 4)
ans = 1;
}
for(i = 0; i < 10; i++)
{
if(num2 == teamNums[i])
{
j = i;
i = 10;
k = 1;
}
}
if(k == 1)
{
if(arrCount[j] == 4)
ans = 1;
}
return ans;
/*
while(temp != NULL || ans == -1)
{
if(temp->num == num1 || temp->num == num2 && temp->count == 4)
{
ans = -1;
return ans;
}
else
{
temp = temp->next;
ans = 0;
}
}
return ans;
*/
}
void week(int weekNum)
{
int weeklyUsed[10];
int random;
int i;
int j = 0;
int res = 1;
int times = 0;
// teams * ptr = NULL;
for(i = 0; i < 10; i+=2)
{
do{
weeklyUsed[i] = getRandom(head);
weeklyUsed[i + 1] = getRandom(head);
//printf("%d %d", weeklyUsed[i], weeklyUsed[i+1]);
for(j = 0; j <= i; j++)
{
if(i == j)
{
if(weeklyUsed[j] == weeklyUsed[i + 1])
{
res = 0;
j = i;
}
else
{
res = 1;
}
}
if(i != j)
{
if(weeklyUsed[j] == weeklyUsed[i] || weeklyUsed[j] == weeklyUsed[i + 1])
{
res = 0;
j = i;
}
else
{
res = 1;
}
}
}
}while(weeklyUsed[i] == weeklyUsed[i + 1] || res == 0);
// updateTeamCount(weeklyUsed[i], weeklyUsed[i + 1]);
}
calculateMatchups(weeklyUsed, weekNum);
}
void calculateMatchups(int array[], int weekNum)
{
int i;
int j = 0;
int k;
int matchup;
int res = 1;
int val = 1;
int usedCount = 0;
int utCount = 0;
int success[10];
int successCount = 0;
for(i = 0; i < 10; i++)
printf("%d ", array[i]);
printf("\n");
for(i = 0; i < 10; i +=2)
{
val = 1;
matchup = array[i] * array[i+1];
res = 1;
printf("Teams: %d %d Matchup #: %d\n", array[i], array[i + 1], array[i] * array[i+1]);
if(usedIndex == 0)
{
used[0] = matchup;
usedIndex++;
res = 0;
}
else
{
for(j = 0; j < usedIndex; j++)
{
if(used[j] == matchup)
{
j = usedIndex;
val = 0;
/* if(utIndex == 0)
{
usedTwice[0] = matchup;
utIndex++;
} */
for(k = 0; k < utIndex; k++)
{
if(usedTwice[k] == matchup)
{
k = utIndex;
// printf("%d THREE TIMES\n", matchup);
utIndex -= utCount;
usedIndex -= usedCount;
i = 11;
// printf("ran\n");
week(weekNum);
res = 0;
return;
}
}
if(res != 0)
{
if(checkCount(array[i], array[i + 1]) == 1)
{
week(weekNum);
i = 11;
}
usedTwice[utIndex] = matchup;
utIndex++;
utCount++;
success[successCount] = array[i];
successCount++;
success[successCount] = array[i + 1];
successCount++;
}
}
}
if(val != 0)
{
used[usedIndex] = matchup;
usedIndex++;
usedCount++;
}
//if(successCount != 10)
//updateTeamCount(success);
}
}
if(successCount != 0)
updateTeamCount(success, successCount);
}
void updateTeamCount(int array[], int i)
{
int j, k;
char* text = "ffoutput.xls";
FILE * output = fopen(text, "w");
for(j = 0; j < i; j++)
{
for(k = 0; k < 10; k++)
{
if(array[j] == teamNums[k])
arrCount[k]++;
}
}
/*
printf("%d\n", a);
a++;
teams * temp = head;
if(i < 10)
{
while(temp != NULL)
{
for(k = 0; k < i; k++)
{
if(temp->num == array[k])
{
temp->count++;
}
}
temp = temp->next;
}
}
*/
}
int getRandom(teams * ptr)
{
teams * temp = ptr;
teams * temp2 = ptr;
int count = 0;
int random;
int i;
while(temp != NULL)
{
count++;
temp = temp->next;
}
random = rand() % count;
for(i = 0; i < random; i++)
temp2 = temp2->next;
return temp2->num;
}
teams * insertNode(void)
{
int i;
teams * newTeam = NULL;
teams* temp2 = NULL;
teams * temp = NULL;
for(i = 0; i < 10; i++)
{
// temp2 = newTeam;
temp = createNode(i);
/*
if(newTeam == NULL)
newTeam = temp;
else
{
while(temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next = temp;
temp2->next = NULL;
}
newTeam = temp2;
*/
temp->next = newTeam;
newTeam = temp;
}
return newTeam;
}
teams * createNode(int data)
{
teams * temp = malloc(sizeof(teams));
temp->num = teamNums[data];
strcpy(temp->name, titles[data]);
temp->count = 0;
temp->next = NULL;
return temp;
}
The bolded section gives me an infinite loop only when I call week(weekNum). Not sure how to fix this or if the program just never generates enough unique results. Please help in any way you can. There's a lot of commented out code and printf's from me trying to figure out problems and experimenting with new ways.