YTUOJ-C语言实验-排列

Description

有4个互不相同的数字,输出由其中三个不重复数字组成的排列。

Input

4个整数。

Output

所有排列。

Sample Input

1 2 3 4

Sample Output

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2 4
1 4 2
2 1 4
2 4 1
4 1 2
4 2 1
1 3 4
1 4 3
3 1 4
3 4 1
4 1 3
4 3 1
2 3 4
2 4 3
3 2 4
3 4 2
4 2 3
4 3 2

HINT

Source

ZJGSU

代码如下:

#include <stdio.h>
int i,j,k,a[3],b[3],c[3];
void Sort(int e[])
{
    for (i=0; i<3; i++)
        a[i]=b[i]=c[i]=e[i];
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            for(k=0; k<3; k++)
            {
                if(a[i]==b[j]||a[i]==c[k]||b[j]==c[k])
                    continue;
                else
                    printf("%d% d %d\n",a[i],b[j],c[k]);
            }
        }
    }
}
int main()
{
    int i, d[4],e[3];
    for (i=0; i<4; i++)
        scanf("%d", d+i);
    e[0]=d[0],e[1]=d[1],e[2]=d[2];
    Sort(e);
    e[0]=d[0],e[1]=d[1],e[2]=d[3];
    Sort(e);
    e[0]=d[0],e[1]=d[2],e[2]=d[3];
    Sort(e);
    e[0]=d[1],e[1]=d[2],e[2]=d[3];
    Sort(e);
    return 0;
}

运行结果:

学习心得:

最近在尝试着用C语言去做题,但是还是摆脱不了浓浓的C++气息,经常因为带上C++中的一些关键字而错误。

这道题其实一开始是没有思路的,第一反应是枚举,结果那只适用于1,2,3,4,的情况。然后想到了用多个数组来保存,能够完美执行,但是还是错了,它居然要求了排列顺序,

于是进一步复杂化,一次分成了四次。总算还是AC了

时间: 2024-10-16 06:12:31

YTUOJ-C语言实验-排列的相关文章

sdut oj 1163 C语言实验——排列 (当初不会递归生成排列,这个题目现在才补上 刘汝佳给出了写法 *【模板】 当然有生成全排列的函数存在 )

C语言实验——排列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 有4个互不相同的数字,请按序输出由其中三个不重复数字组成的排列. 输入 4个整数. 输出 所有排列,输出顺序见样例. 示例输入 1 2 3 4 示例输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 1 2 4 1 4 2 2 1 4 2 4 1 4 1 2 4 2 1 1 3 4 1 4 3 3 1 4 3 4 1 4 1 3 4

C语言实验——一元二次方程Ⅱ

C语言实验--一元二次方程Ⅱ Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 169  Solved: 131 [Submit][Status][Web Board] Description 求一元二次方程ax2+bx+c=0的解.a,b,c为任意实数. Input 输入数据有一行,包括a b c的值. Output 按以下格式输出方程的根x1和x2.x1和x2之间有一个空格. x1 x2 (1)如果x1和x2为实根,则以x1>=x2输出. (2)如

rwkj 1332 C语言实验四(函数):题目1、数字根

C语言实验四(函数):题目1.数字根 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:305            测试通过:185 描述 正整数的数字根是将数位上的数字求和进行计算而来.如果各位数字之和为一位的整数,那么这个整数就是这个数的数字根:如果之后为多位数,那么重复运用此规则进行计算直至求出一个一位数.例如12,那么它的数字根就为1+2=3:例如39那么它的数字根就为3+9=12,1+2=3,最终为3. 输入 每行输入

SDUT 1177 C语言实验——时间间隔

C语言实验--时间间隔 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用"小时:分钟:秒"表示.如:3点5分25秒应表示为--03:05:25.假设两个时间在同一天内,时间先后顺序与输入无关. Input 输入包括两行.第一行为时间点1.第二行为时间点2. Output 以"小时

C语言实验报告(三)

C语言实验报告(三) 实验项目: 4.3.1:if语句的应用 4.3.2:switch-case的应用 4.3.3:switch-case嵌套if语句的应用 4.3.4:switch-case结构嵌套的应用 4.3.5:分析程序 项目实训:计算器的实现 姓名:徐志平 实验地点:家  实验时间:2020.3.28 一.实验目的与要求 1.掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”) 2.学会正确地使用关系表达式和逻辑表达式 3.掌握各种形式的if语句语法和使用方法.if语句中if和el

R语言——实验4-人工神经网络(更新中)

带包实现: rm(list=ls()) setwd("C:/Users/Administrator/Desktop/R语言与数据挖掘作业/实验4-人工神经网络") Data=read.csv("sales_data.csv")[,2:5] library(nnet) colnames(Data)<-c("x1","x2","x3","y") model1=nnet(y~.,data

c语言 实验1

实验结论 Part 1 首次运行Part 1的几个实验内容时会产生错误,原因如下 有时忘记在主函数中的每行末尾加分号 return 0 时空格错误导致程序运行失败 # include <stdio.h> int product (int,int); int main (void) { int x,y,s; scanf("%d%d",&x,&y); s=product(x,y); printf("The mul is:%d",s); ret

第二次C语言实验

Part1: printf(),scanf()函数的用法 /* C语言程序设计教程学习指导>p119 实验内容(2) 这是一个格式化输入输出函数及格式符使用练习 找出两处错误,修改并运行程序 为a1,a2,a3,c1,c2,c3,x,y输入数据,使得: a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5 */ #include <stdio.h> int main() { double x,y; char c1,c2,c3; int a1,

R语言- 实验报告 - 数据清洗

一. 实训内容 能对基本的开发环境进行检验和错误排查,以及对新语言软件进行安装. 能使用Navicat for MySQL对MySQL数据库进行基本的连接测试,同时,在mysql中新建student数据库.能利用外部SQL脚本文件对数据库进行数据集的导入和初始化. 熟悉利用eclipse编程工具,新建项目和工具类对mysql数据库进行相应的操作,以及从该项目中导出可执行的jar文件. 利用R-3.6.1-win.exe运行,导出的可执行的jar文件.并编写一个“数据清洗.r”脚本文件,对C:\