| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 669 人关注过本帖
标题:帮帮忙。。。。。解决了给他充50块话费。。。
只看楼主 加入收藏
lyxcjm
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2011-4-16
结帖率:88.89%
收藏
已结贴  问题点数:15 回复次数:9 
帮帮忙。。。。。解决了给他充50块话费。。。
以1到16随机输出5个数字的且不 重复的数组(位置不 论),若和下列每组数组中有4个或以上数字相同的数组不输出。。。。。
{1,2,3,4,5}{3,4,6,7,}{4,5,8,9,10}(这列数组不是固定的,应该是我输入的)
谢谢
搜索更多相关主题的帖子: 数字 
2012-06-06 20:21
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:8 
写了个程序,你看看,输入的时候要输入个数 按次回车 输入15个数
赶时间,写的太没有美感了,哎
要是可以的话,你说话~
程序代码:
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int buffer[3][5] = {0};
    int target[5] = {0};
    int flag[3] = {0};
    int isexit = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    int p = 0;
    int tmp;
    for (; i<3; i++)
    {
        printf("请输入目标数组:\n");
        for (j=0; j<5; j++)
        {
            scanf("%d",&tmp);
            buffer[i][j] = tmp;
        }
    }
    for (i=0; i<3; i++)
    {
        printf("您的数组为:\n");
        for (j=0; j<5; j++)
        {
            printf("%d ",buffer[i][j]);
        }
        printf("\n==============================\n");
    }
    while (p<5)
    {
        if((tmp=rand()%17)==0)
        {
            continue;
        }
        for (i=0; i<3; i++)
        {
            for (j=0; j<5; j++)
            {
                if (tmp==buffer[i][j])
                {
                    flag[k] += 1;
                }
            }
            k++;
        }
        k = 0;
        for (i=0; i<5; i++)
        {
            if (tmp==target[i])
            {
                isexit = 1;
                break;
            }
        }
        if ((isexit==0)&&(flag[0]<=3)&&(flag[1]<=3)&&(flag[2]<=3))
        {
            target[p++] = tmp;
        }
        isexit = 0;
        for (i=0; i<3; i++)
        {
            if (flag[i]>3)
            {
                flag[i] -=1;
            }
        }
    }
    printf("得出的数组为:\n");
    for (i=0; i<5; i++)
    {
        printf("%d ",target[i]);
    }
    printf("\n");
}


[ 本帖最后由 demonleer 于 2012-6-6 21:30 编辑 ]
2012-06-06 21:25
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
给出运行实例,你看看
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-06-06 21:29
kjl11070820
Rank: 1
等 级:新手上路
帖 子:5
专家分:8
注 册:2012-6-6
收藏
得分:8 
大婶啊!!!
2012-06-06 21:37
lyxcjm
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2011-4-16
收藏
得分:0 
回复 2楼 demonleer
没有搞懂
运行了结果也不对
以1到16随机输出5个数字的数组,,位置不 论,,我 这说的是所有能组成5个数字的数组。。。。。。。
在这结果上才和我那最后的要求做比较,,,,符合要求的输出而已。。。。
你在看看。。。谢谢
2012-06-08 19:01
lyxcjm
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2011-4-16
收藏
得分:0 
还有
那要求的数组输入的组数也是我输入的,,,,,下面一个例子;前面的大致相同(随机输出的)的,只是,后面的要求还做的比较不一样而已,,你做下比较。。
#include <stdio.h>
#include <stdlib.h>

int  same_state=0;            //包含状态位
void findout(int a[],int n,int m,int r,int q[],int **BB,int bb);
void main()
{
    int n,r;int *p,*q;
    int b,bb;int **B;        //存储要删除的数组
    printf("要找的不同的整数个数:");
    scanf("%d",&n);
    p=(int*)malloc(n*sizeof(int));
    printf("输入%d个不同的整数:",n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&p[i]);
    }
    printf("输入要找元素组合的个数:");
    scanf("%d",&r);
    q=(int *)malloc(r*sizeof(int));
   
   
    printf("\n输入你将要输入的数组个数:");          //根据你的例子有两个数组,这里应该输入2
     scanf("%d",&bb);
    B=(int **)malloc(bb*sizeof(int*));

    for( i=0;i<bb;i++)
    {
        B[i]=(int *)malloc(sizeof(int));
        B[i][0]=0;
        printf("请输入第%d个数组:",i+1);
      for(int j=2;1;j++)
      {
      
      
         scanf("%d",&b);
         if(b==0) break;                                   //每输入一个数组后请输入一个0来结束输入
         else        
         {
             B[i]=(int *)realloc(B[i],j*sizeof(int));
             B[i][j-1]=b;
             B[i][0]++;
         }

      }
    }
    findout(p,n,r,r,q,B,bb);
}

void findout(int a[],int n,int m,int r,int q[],int **BB,int bb)
{
    for(int i=n;i>=m;i--)
    {
        q[m-1]=a[i-1];
        if(m>1)
            findout(a,i-1,m-1,r,q,BB,bb);
        else
        {   

    /*---这段是比较,如果输出数组中包含了其中一项要删除的数组,same_state将变为b,否则仍然是0---*/
            same_state=0;
            for(int x=0;x<bb;x++)
            {
               for(int y=0;y<BB[x][0];y++)
               {
                  if(same_state!=y) break;
                  for(int z=0;z<r;z++)
                  {
                     if(q[z]==BB[x][y+1])
                     {
                       same_state++;
                     }

                  }
                  
               
               }
               if(same_state==BB[x][0]) break;
               else              same_state=0;
            }

    /*---------------------------------------------------------------------------------*/
            if(same_state!=0)
            {
            for(int j=r-1;j>=0;j--)
                printf("%d   ",q[j]);
            putchar('\n');
            
            }
        }
        
    }

}
2012-06-08 19:16
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
是你说要所有的,你看看吧。

代码写的很垃圾,但是功能够了应该。

数组是你输入啊,你一共要输入15个数。

每输入一个数请按一次回车。

结果有很多很多。

程序代码:
#include <stdio.h>
#include <stdlib.h>

int result[5] = {0};
int *line = result;
int flag[3] = {0};
int buffer[3][5] = {0};

void is_illegal()
{
    int m,i,j,k;
    for (m=0; m<3; m++)
    {
        flag[m] = 0;
    }
    for (i=0; i<5; i++)
    {
        for (j=0; j<3; j++)
        {
            for (k=0; k<5; k++)
            {
                if (buffer[j][k]==result[i])
                {
                    flag[j]++;
                }
            }
        }
    }
    if (flag[0]<4&&flag[1]<4&&flag[2]<4)
    {
        for (i=0; i<5; i++)
        {
            printf("%d ",result[i]);
        }
        printf("\n");
    }
}

void getallsolotion()
{
    int i = 1, j = 1, k = 1, m = 1, n = 1;
    int row = 0;
    while (i<17)
    {
        for (j=1; j<17; j++)
        {
            if (j==i)
            {
                continue;
            }
            for (k=1; k<17; k++)
            {
                if ((k==i)||(k==j))
                {
                    continue;
                }
                for (n=1; n<17; n++)
                {
                    if ((n==i)||(n==j)||(n==k))
                    {
                        continue;
                    }
                    for (m=1; m<17; m++)
                    {
                        if ((m==i)||(m==j)||(m==k)||(m==n))
                        {
                            continue;
                        }
                        *(line+row++) = i;
                        *(line+row++) = j;
                        *(line+row++) = k;
                        *(line+row++) = n;
                        *(line+row) = m;
                        is_illegal();
                        row = 0;
                    }
                }
            }
        }
        i++;
    }
}

void main()
{
    int i = 0;
    int j = 0;
    int tmp;
    for (; i<3; i++)
    {
        printf("请输入目标数组:\n");
        for (j=0; j<5; j++)
        {
            scanf("%d",&tmp);
            buffer[i][j] = tmp;
        }
    }
    for (i=0; i<3; i++)
    {
        printf("您的数组为:\n");
        for (j=0; j<5; j++)
        {
            printf("%d ",buffer[i][j]);
        }
        printf("\n==============================\n");
    }
    getallsolotion();
}


[ 本帖最后由 demonleer 于 2012-6-8 21:23 编辑 ]
2012-06-08 21:21
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
输入的格式像这个样子,明白了没?

图片附件: 游客没有浏览图片的权限,请 登录注册
2012-06-08 21:30
lyxcjm
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2011-4-16
收藏
得分:0 
回复 8楼 demonleer
你看懂我 上面给你的例子没有。。。我说的那要求做比较的数组是我输入的,,,还有
那做比较的数组的组数也是我输入的,,这里。你把我要作比较数组的组数定格为3组了,
可以变动不,就像我上面给你的例子一样,,上面的例子中那随机输出的数字和(1到16)是我输入的,组成几维数组也是我输入定的,做比较数组的组数也是我输入定的,只是,要求做的比较不一样而已,,,你在帮帮我吧,,,,谢谢
2012-06-09 17:28
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
我说的那要求做比较的数组是我输入的,,,还有
那做比较的数组的组数也是我输入的,,

都是你输入的你还要随机数干嘛?
2012-06-09 18:22
快速回复:帮帮忙。。。。。解决了给他充50块话费。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018352 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved