回 帖 发 新 帖 刷新版面

主题:俺编的足彩复式转单式程序

输入时用逗号隔开.
#include "stdio.h"
#include "conio.h"
#define N 13
/********************检验输入是否正确*********************************/
int check(char *a)
{int i=0,j=0,k=0;
    while(*(a+i)!='\0')
         {if(*(a+i)=='3'||*(a+i)=='1'||*(a+i)=='0')
            {j++;
             if(j>3) return 0;
             if(j==2&&*(a+i)==*(a+i-1)) return 0;
             if(j==3&&(*(a+i)==*(a+i-1)||*(a+i)==*(a+i-2))) return 0;
             }
          else if(*(a+i)==',')
            {if(i==0||*(a+i-1)==',') return 0;
             k++;
             j=0;
             }
          else
             return 0;
          i++;
          }
    if(k!=N-1||*(a+i-1)==',') return 0;
    return 1;}
/**************************排列***********************************/
void pai(char *a)
{int i=0,j=0,b[N-1],k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13;
    while(*(a+i)!='\0')
         {if(*(a+i)==',')
            {b[j]=i;
             j++;}
          i++;}
    j=0;
    for(k1=0;k1<b[0];k1++)
    for(k2=b[0]+1;k2<b[1];k2++)
    for(k3=b[1]+1;k3<b[2];k3++)
    for(k4=b[2]+1;k4<b[3];k4++)
    for(k5=b[3]+1;k5<b[4];k5++)
    for(k6=b[4]+1;k6<b[5];k6++)
    for(k7=b[5]+1;k7<b[6];k7++)
    for(k8=b[6]+1;k8<b[7];k8++)
    for(k9=b[7]+1;k9<b[8];k9++)
    for(k10=b[8]+1;k10<b[9];k10++)
    for(k11=b[9]+1;k11<b[10];k11++)
    for(k12=b[10]+1;k12<b[11];k12++)
    for(k13=b[11]+1;k13<i;k13++)
   {j++;
    printf("\n%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c",
    a[k1],a[k2],a[k3],a[k4],a[k5],a[k6],a[k7],a[k8],a[k9],a[k10],a[k11],a[k12],a[k13]);}
    printf("\nTotal=%d",j);
}
/**********************************************************************/
main()
{char *a;
    printf("input %d num,输入时用逗号隔开:\n",N);
    gets(a);
    while(check(a)==0)
         {puts("error! input again:");
          gets(a);}
    puts("OK!");
    pai(a);
getch();
}

回复列表 (共6个回复)

沙发

[em1]

板凳

3 楼

4 楼

是不是再调一下呢?好像不行哦!

5 楼

输入时用逗号隔开,不能多输或少输.结尾别多输一个逗号.
程序中检验不对就会要重输的,哈[em8]

6 楼

晕~~~~~~~~~~~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册