BUAA全排列数的生成

【问题描述】输入整数N( 1 <= N <= 10 ),生成从1~N所有整数的全排列。
【输入形式】输入整数N。
【输出形式】输出有N!行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行上的全排列不重复。输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。
【样例输入1】1
【样例输出1】1
【样例说明1】输入整数N=1,其全排列只有一种。
【样例输入2】3
【样例输出2】
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
【样例说明2】输入整数N=3,要求整数1、2、3的所有全排列, 共有N!=6行。且先输出1开头的所有排列数,再输出2开头的所有排列数,最后输出3开头的所有排列数。在以1开头的所有全排列中同样遵循此原则。
【样例输入3】10
【样例输出3】
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 10 9
1 2 3 4 5 6 7 9 8 10
1 2 3 4 5 6 7 9 10 8
1 2 3 4 5 6 7 10 8 9
1 2 3 4 5 6 7 10 9 8
1 2 3 4 5 6 8 7 9 10
1 2 3 4 5 6 8 7 10 9
1 2 3 4 5 6 8 9 7 10
1 2 3 4 5 6 8 9 10 7
……………………
【样例说明3】输入整数N=10,要求整数1、2、3、……、10的所有全排列。上例显示了输出的前10行。
【运行时限】要求每次运行时间限制在20秒之内。超出该时间则认为程序错误。提示:当N增大时,运行时间将急剧增加。在编程时要注意尽量优化算法,提高运行效率。
【评分标准】该题要求输出若干行整数。。

如果不会做,千万别抄,亲测打表能过,打到5就行

我当时也就打到了6000行。。。
在这里插入图片描述

#include <math.h>
#include <stdio.h>
int b, nmin, nmax, type;
int a[12];
int main()
{
   
    scanf("%d", &b);
    nmin = b, nmax = 0;
    for (int i = b; i > 0; i--)
        nmin += (b - i) * pow(10, i);
    for (int i = 0; i < b; i++)
        nmax += (i + 1) * pow(10, i);
    for (int i = nmin; i < nmax + 1; i++)
    {
   
        int temp = i;
        for (int j = b - 1; j > -1; j--)
        {
   
            a[j] = temp % 10;
            temp /= 10;
        }
        for (int k = 0; k < b - 1; k++)
        {
   
            for (int m = k + 1; m < b; m++)
            {
   
                if (a[k] == a[m] || a[m] > b || a[k] > b || a[m] == 0)
                {
   
                    type = 1;
                    break;
                }
            }
            if (type == 1)
                break;
        }
        for (int count = 0; count 
  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
BUAA(北京航空航天大学)编译设计文档是一个重要的技术文档,旨在记录编译器的整个设计过程,包括底层硬件平台和上层软件环境的选择、编译器设计原理和算法、编译器的组成模块、编译过程的各个阶段以及错误处理等。 首先,BUAA编译设计文档应明确描述底层硬件平台和上层软件环境的选择,例如CPU架构、操作系统等。这对于后续编译器的设计和实现起到了基础性的作用。 其次,对于编译器设计原理和算法的描述是设计文档中的重要部分。这部分应对编译器的前端、中端和后端进行详细的说明。前端涉及到词法分析、语法分析和语义分析等,中端包括优化和中间代码生成,后端则包括目标代码生成和代码优化等。对于每个阶段的算法和实现细节都应详细记录。 此外,编译器的组成模块也应在设计文档中列出。例如,符号表管理模块、类型检查模块、代码生成模块等。对于每个模块,应描述其功能、组成和实现细节,并给出相应的流程图或类图进行说明。 编译过程的各个阶段也是设计文档的重点内容。例如,从源代码到目标代码的整个编译过程应通过流程图或文字描述清楚。这包括了各个阶段的输入输出以及相互之间的关系。 最后,BUAA编译设计文档还应包括对错误处理的描述。这包括语法错误、类型错误和编译错误等的处理方式和处理流程。同时,还需说明如何生成有用的错误信息,以方便开发者对错误进行调试和修复。 总之,BUAA编译设计文档是对编译器设计过程进行详细记录和说明的文档,涵盖了底层硬件平台和上层软件环境的选择、编译器设计原理和算法、编译器的组成模块、编译过程的各个阶段以及错误处理等内容。它是编译器开发和维护的重要参考资料,为开发者提供了设计思路和技术指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值