What I'm trying to do is create a schedule generator for a fantasy football league. The key things that need to happen are:
-- that all 10 teams have to play every other team in the league once.
-- every team will also play 4 teams twice (since it is a 13 week schedule)

So they system I've come up with (probably not the best) is two find a set of numbers whose factors are unique no matter which two numbers you use. I used 21-30. There factors then become a matchup number. I'm having trouble when making sure that every team has only four match-ups with other teams.

Not sure if I'm being clear enough.


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.