| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 716 人关注过本帖
标题:编程,求助各位大哥大姐?
只看楼主 加入收藏
飞64213118
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-10-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
编程,求助各位大哥大姐?
试编程求出完全装错情形的所有方式及其总量s。例如,输入n=3,即有3封信需要装入信封,完全装错的一种方式可以表示为312,表示第1封信装入第3个信封,第2封信装入第1个信封,第3封信装入第2个信封。对于n=3,完全装错的方式共有2种,分别是312和231.
搜索更多相关主题的帖子: 信封 编程 大哥 
2011-11-13 21:40
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:18 
程序代码:
#include<stdio.h>
#define NUM 100 /*定义数组的大小*/
int a[NUM+1];
int main()
{
    int i,k,flag,not_finish=1,count=0,flag_2;
    i=1; /*正在处理的元素下标,表示前i-1个元素已符合要求,正在处理第i个元素*/
    a[1]=1; /*为数组的第一个元素赋初值*/
    int n;
    do
    {
        printf("输入信封数量:");
        scanf("%d",&n);
    }while(n<1);
    printf("结果如下:\n");
    if(n==1)
    {
        printf("没有错误的可能。\n");
    }
    else if(n==2)
    {
        printf(" [ 1]:  2 1\n");
    }
    else
    {
        while(not_finish) /*not_finish=1:处理尚未结束*/
        {
            while(not_finish&&i<=n) /*处理尚未结束且还没处理到第n个元素*/
            {
                for(flag=1,k=1;flag&&k<i;k++) /*判断是否有多个皇后在同一行*/
                {
                    if(a[k]==a[i])flag=0;
                }
                //    for(k=1;flag&&k<i;k++) /*判断是否有多个皇后在同一对角线*/
                //        {
                //            if((a[i]==a[k]-(k-i))||(a[i]==a[k]+(k-i)))  flag=0;
                //        }
                if(!flag) /*若存在矛盾不满足要求,需要重新设置第i个元素*/
                {
                    if(a[i]==a[i-1]) /*若a[i]的值已经经过一圈追上a[i-1]的值*/
                    {
                        i--; /*退回一步,重新试探处理前一个元素*/
                        if(i>1&&a[i]==n)
                            a[i]=1; /*当a[i]为n时将a[i]的值置1*/
                        else if(i==1&&a[i]==n)
                            not_finish=0; /*当第一位的值达到n时结束*/
                        else a[i]++; /*将a[i]的值取下一个值*/
                    }
                    else if(a[i]==n) a[i]=1;
                    else a[i]++; /*将a[i]的值取下一个值*/
                }
                else if(++i<=n)
                {
                    if(a[i-1]==n) a[i]=1; /*若前一个元素的值为NUM则a[i]=1*/
                    else a[i]=a[i-1]+1; /*否则元素的值为前一个元素的下一个值*/
                }
            }
            if(not_finish)
            {
                flag_2=1;
                for(int kk=1;kk<=n;kk++)
                {
                    if(a[kk]==kk)
                        flag_2=0;
                }
                if(flag_2==1)
                {
                    ++count;
                    printf((count-1)%3?"\n [%2d]: ":"\n [%2d]: ",count);
               
                    for(k=1;k<=n;k++) /*输出结果*/
                    {
                   
                        printf(" %d",a[k]);
                    }
                }
                if(a[n-1]<n) a[n-1]++; /*修改倒数第二位的值*/
                else a[n-1]=1;
                i=n-1; /*开始寻找下一个足条件的解*/
            }
        }
    }
    printf("\n");
    return 0;
}
2011-11-14 11:03
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
全排列,去掉不符合的。

[ 本帖最后由 laznrbfe 于 2011-11-14 11:35 编辑 ]
2011-11-14 11:04
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:1 
这个问题叫 错排。最近怎么总是重复地问题?

重剑无锋,大巧不工
2011-11-14 11:25
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:1 
重复,在图像中是一种美感产生的来源。

我们都在路上。。。。。
2011-11-14 13:21
飞64213118
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-10-2
收藏
得分:0 
谢谢各位了,我已经做好了
2011-11-14 19:39
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
著名的错排公式

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-11-14 19:45
快速回复:编程,求助各位大哥大姐?
数据加载中...
 
   



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

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