求解决c语言保安排班系统

求用c语言数据结构的知识解答一下,或者用什么结构做

//.cpp : <span class="hljs-symbol">Defines</span> the entry point for the console application.
//
#include <span class="hljs-string">"string.h"</span>
#include <stdio.h> 
char *<span class="hljs-symbol">WEEK</span>[<span class="hljs-number">7</span>] = { <span class="hljs-string">"星期天"</span>, <span class="hljs-string">"星期一"</span>, <span class="hljs-string">"星期二"</span>, <span class="hljs-string">"星期三"</span>, <span class="hljs-string">"星期四"</span>, <span class="hljs-string">"星期五"</span>, <span class="hljs-string">"星期六"</span> };
struct demand
{
    char name[<span class="hljs-number">5</span>];
    int day[<span class="hljs-number">7</span>];
} man[<span class="hljs-number">7</span>];
 
int main()
{
    int <span class="hljs-symbol">IsChecked</span>(int p[]);
    int  t = <span class="hljs-number">0</span>, j, ren[<span class="hljs-number">7</span>];
    long i, k;
    printf(<span class="hljs-string">"****************保安值班系统****************\n"</span>);
    printf(<span class="hljs-string">"请各位分别输入各自合适的休假日\n"</span>);
    printf(<span class="hljs-string">"如赵保安选择星期二和星期三,就输入2 3 然后回车\n"</span>);
    printf(<span class="hljs-string">"数字0 1 2 3 4 5 6分别代表\n星期天 星期一 星期二 星期三 星期四 星期五 星期六\n"</span>);
    printf(<span class="hljs-string">"注意要输入星期天请输入数字0 \n"</span>);
    for (i = <span class="hljs-number">0</span>; i<<span class="hljs-number">7</span>; i++)
    {
        printf(<span class="hljs-string">"请第%d个人输入\n"</span>, i + <span class="hljs-number">1</span>);
        for (k = <span class="hljs-number">0</span>; k<<span class="hljs-number">7</span>; k++)
        {
            //scanf(<span class="hljs-string">"%d"</span>,&man[i].day[k]);   
            char c;
            scanf(<span class="hljs-string">"%c"</span>, &c);
            if (c == <span class="hljs-string">'\n'</span>)
            {
                break;//读取到换行符,即回车,退出循环。
            }
            else if (c >= <span class="hljs-number">48</span> && c <= <span class="hljs-number">57</span>)
            {
                man[i].day[k] = (int)(c - <span class="hljs-string">'0'</span>);
                //printf(<span class="hljs-string">"%d %c\n"</span>, k, c);
            }
            else if (c == <span class="hljs-string">' '</span>)
            {
                k--;
            }
        }
        // printf(<span class="hljs-string">"你输入的day是:"</span>);
        // for(k=<span class="hljs-number">0</span>;k<<span class="hljs-number">7</span>;k++)
        // {
        //     printf(<span class="hljs-string">"%d "</span>,man[i].day[k]);
        // } 
        // printf(<span class="hljs-string">"\n"</span>);
        printf(<span class="hljs-string">"你输入的day是:"</span>);
        for (int m = <span class="hljs-number">0</span>; m < k; m++)
        {
            printf(<span class="hljs-string">"%d "</span>, man[i].day[m]);
        }
        for (int m = k; m < <span class="hljs-number">7</span>; ++m)
        {
            man[i].day[m] = <span class="hljs-number">8</span>;
            printf(<span class="hljs-string">"%d "</span>, man[i].day[m]);
        }
        printf(<span class="hljs-string">"\n"</span>);
    }
    printf(<span class="hljs-string">"**********************************************"</span>);
    printf(<span class="hljs-string">"\n*  赵,    钱,    孙,    李,    周 ,    吴,    陈 ,  *\n"</span>);
    printf(<span class="hljs-string">"*--------------------------------------------*\n"</span>);
    printf(<span class="hljs-string">""</span>);
    for (i = <span class="hljs-number">0</span>; i < <span class="hljs-number">2097152</span>; ++i)
    {
        for (j = <span class="hljs-number">0</span>; j<<span class="hljs-number">7</span>; ++j)
        {
            ren[j] = (i >> (<span class="hljs-number">3</span> * j)) & <span class="hljs-number">7</span>; /<span class="hljs-comment">/*通过这个循环,穷尽0-7在数组中所有的排列组合方式*/</span>/
        }
        if (!(ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">0</span>] == man[<span class="hljs-number">0</span>].day[<span class="hljs-number">6</span>]))
            continue;/<span class="hljs-comment">/*如果赵保安不是休周二或周四,就不用循环了。*/</span>/
        else if (!(ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">1</span>] == man[<span class="hljs-number">1</span>].day[<span class="hljs-number">6</span>]))
            continue; /<span class="hljs-comment">/*如果钱保安不是休周一或周六,就不用循环了。*/</span>/
        else if (!(ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">2</span>] == man[<span class="hljs-number">2</span>].day[<span class="hljs-number">6</span>]))
            continue; /<span class="hljs-comment">/*如果孙保安不是休周三或周日,就不用循环了。*/</span>/
        else if (!(ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">3</span>] == man[<span class="hljs-number">3</span>].day[<span class="hljs-number">6</span>]))
            continue; /<span class="hljs-comment">/*如果李保安不是休周五,就不用循环了。*/</span>/
        else if (!(ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">4</span>] == man[<span class="hljs-number">4</span>].day[<span class="hljs-number">6</span>]))
            continue; /<span class="hljs-comment">/*如果周保安不是休周一或周四或周六,就不用循环了。*/</span>/
        else if (!(ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">5</span>] == man[<span class="hljs-number">5</span>].day[<span class="hljs-number">6</span>]))
            continue; /<span class="hljs-comment">/*如果吴保安不是休周二或周五,就不用循环了。*/</span>/
        else if (!(ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">0</span>] || ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">1</span>] || ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">2</span>] || ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">3</span>] || ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">4</span>] || ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">5</span>] || ren[<span class="hljs-number">6</span>] == man[<span class="hljs-number">6</span>].day[<span class="hljs-number">6</span>]))
            continue; /<span class="hljs-comment">/*如果陈保安不是休周三或周六或周日,就不用循环了。*/</span>/
        else if (!<span class="hljs-symbol">IsChecked</span>(ren))
            continue; /<span class="hljs-comment">/*至此,所有的保安可按他们的愿望休假,但是此时的方案可能有两个人同休一天的*/</span>/
        /<span class="hljs-comment">/*情况发生,因此用这个函数排除,如果0-6这七个数字(一周七天)任何一个包含在数组中则此次匹配失败。*/</span>/
        for (j = <span class="hljs-number">0</span>; j<<span class="hljs-number">7</span>; ++j)
        {
            printf(<span class="hljs-string">"%s "</span>, <span class="hljs-symbol">WEEK</span>[ren[j]]);
        }
        printf(<span class="hljs-string">"   *"</span>);
        printf(<span class="hljs-string">"\n"</span>);  /<span class="hljs-comment">/*输出成功匹配方案*/</span>/
        ++t;  /<span class="hljs-comment">/*记录成功匹配个数*/</span>/
    }
 
    printf(<span class="hljs-string">"*--------------------------------------------*"</span>);
    printf(<span class="hljs-string">"\n*          %d 种 情 况!               *"</span>, t); /<span class="hljs-comment">/*输出成功匹配方案个数*/</span>/
    printf(<span class="hljs-string">"\n**********************************************"</span>);
    getchar();
    return <span class="hljs-number">0</span>;
}
 
int <span class="hljs-symbol">IsChecked</span>(int p[])
{
    int i, j;
    for (i = <span class="hljs-number">0</span>; i<<span class="hljs-number">7</span>; ++i)
    {
        for (j = <span class="hljs-number">0</span>; j<<span class="hljs-number">7</span> && p[j] != i; ++j); <span class="hljs-comment">/*从0到6循环,如果数组中缺少0-6的任何一位数字,则返回0,如果0-6都有,则返回。*/</span>
        if (j == <span class="hljs-number">7</span>)
            return <span class="hljs-number">0</span>;
    }
    return <span class="hljs-number">1</span>; /<span class="hljs-comment">/*这个函数的作用是确保0-6这7个数字均包含在该数组中*/</span>/
}

img