C语言每日练习之乒乓球比赛问题

目录
  • 题目描述
  • 分析
  • 代码实现
  • 后期完善
  • 网上参考
    • 解法一:
    • 解法二:
  • 总结

题目描述

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单

分析

简单的组合问题,而且不考虑排序,如果固定a,b,c分别在0-2三个比赛队伍,那么两球队最多3种组合方式,全部轮询一遍即可。

代码实现

代码写的有点糟

#include <stdio.h>
int main()
{
    int a = 0; //a的比赛队伍
    int b = 1;
    int c = 2;
    int x = 0, y = 0, z = 0;
    int i = 0;
    for(i = 0; i < 3; i++) //3种组合方式
    {
        x = (i + 0) % 3;
        y = (i + 1) % 3;
        z = (i + 2) % 3;
        if(a != x && c != x && c != z) //匹配条件
            break;
    }
    printf("比赛名单:\n");
    if(a == x)
        printf("a -- x");
    else if(a == y)
        printf("a -- y");
    else
        printf("a -- z");
    printf("\n");
    if(b == x)
        printf("b -- x");
    else if(b == y)
        printf("b -- y");
    else
        printf("b -- z");
    printf("\n");
    if(c == x)
        printf("c -- x");
    else if(c == y)
        printf("c -- y");
    else
        printf("c -- z");
    printf("\n");
    return 0;
}

运行结果

后期完善

经过查阅网上优秀解答,我对我的程序进行了优化,增加了一个代表a,b,c三名队员的字符数组,此时x,y,z的含义变成了自己对手在数组中的下标。

#include <stdio.h>
int main()
{
    int a = 0; //a的比赛队伍
//    int b = 1; //该参数程序未使用
    int c = 2;
    char array[3] = {'a', 'b', 'c'}; //甲队成员
    int x = 0, y = 0, z = 0; //乙队成员的对手(甲队)的数组下标
    int i = 0;
    for(i = 0; i <3; i++) //3种组合方式
    {
        x = (i + 0) % 3;
        y = (i + 1) % 3;
        z = (i + 2) % 3;
        if(a != x && c != x && c != z) //匹配条件
            break;
    }
    printf("比赛名单:x -- %c, y -- %c, z -- %c\n",\
           array[x], array[y], array[z]);
    return 0;
}

网上参考

该网址列举了三种解法,我贴出其中两种:

解法一:

//  Created by www.runoob.com on 15/11/9.
//  Copyright © 2015年 菜鸟教程. All rights reserved.
// https://www.runoob.com/cprogramming/c-exercise-example22.html
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char i,j,k;
    for(i='x';i<='z';i++) {
        for(j='x';j<='z';j++) {
            if(i!=j) {
                for(k='x';k<='z';k++) {
                    if(i!=k&&j!=k) {
                        if(i!='x'&&k!='x'&&k!='z') {
                            printf("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);
                        }
                    }
                }
            }
        }
    }
}

解法二:

/******************************
两个乒乓球队进行比赛,各出三人。
甲队为A,B,C三人,乙队为X,Y,Z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单
.A说他不和X比,C说他不和X,Z比,请编程序找出三队赛手的名单。
*********************************/
#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
    char a,b,c;
    int i,j;
    int n = 0;
    for(i=0;i<3;++i)
    {
        a = 'x'+i;//A的位置,I是相对于X的偏移量
        for(j=1;j<3;++j)
        {
            b = 'x'+(i+j)%3;//B相对与A的位置,(I+J)%3为偏移量
            c = 'x'+3-(i+j)%3-i;//C的位置 要 减去两个偏移量
            if(a!='x'&&c!='x'&&c!='z')
            {
                printf("a--%c,b--%c,c--%c\n",a,b,c);
                n = 1;
                break;
            }
        }
        if(n == 1) break;
    }
    system("pause");
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 如何使用C语言实现细菌的繁殖与扩散

    目录 一.引言 二.题目 详情细菌的繁殖与扩散​​​​​​ 三.思路以及代码 思路 代码 总结 一.引言 这是我在csdn写的第一篇文章~作为一个初学C的萌新,昨天碰到一道关于细菌繁殖与扩散的题目,觉得很有意思,想了一个晚上,终于想到了解法

  • C语言实现简单的扫雷功能

    这是我跟着学习视频完成的第一个小游戏,运用到的知识不多都是数组相关的知识,重要的是思路,在设计的时候要先绘制出大概的框图,要知道游戏的根本,这样会让你写程序的时候更加方便. 下面看代码: test.c #define _CRT_SECURE_NO_WARNINGS #include"game.h" void test(); void menu(); void game(); int main() { test(); return 0; } void menu() { printf(&q

  • C语言实现乒乓球比赛

    本文实例为大家分享了C语言实现乒乓球比赛的具体代码,供大家参考,具体内容如下 1).基本要求 用8个LED发光管(红黄绿)的来回滚动显示来模拟打乒乓球时乒乓球在两边球台上的来回运动.比赛双方用按钮/开关(双方各用1个按钮/开关)的方法来模拟发球与接球,即发球方按动其控制的按钮/开关/健,球从发球方一侧向对方运动(LED发光管从发球方到对方逐个点亮,滚动显示),当球运动至接球方时,接球方立即按动其控制的按钮/开关/键,"击球"使球"弹回"发球方一侧,如此周而复始,直至

  • 基于C语言实现简单的扫雷游戏

    扫雷游戏的实现,必须要考虑其中包含的功能. 首先是在游戏开始时的初始界面,规定用户输入1则游戏开始,输入2则游戏结束,再去创建两个二维数组,一个存放用户看到的界面,一个存放埋雷的雷盘,在进行初始化两个二维数组,用户界面展示为一个10*10的界面,首行和首列存储'0'-'9',给用户直观的可以寻找想要搜索的元素,雷区初始化为' 0 ',用户界面初始化为'?'. 在进行雷位置的初始化,使用数字帧表示,用  数字帧%9+1  得到一个1-9的数字,可以取得一个[1-9][1-9]的坐标,建立一个 i

  • 基于C语言实现井字棋游戏

    井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数组元素是否相同即可.具体我们可以分为以下几步来做: 1.创建维数组并进行初始化,如果仅仅是一个二维数组来表示棋盘,看起来不是很清楚,因此我们可以对棋盘边框用符号打印出来进行优化一下: //初始化棋盘 void init(char board[max_row][max_col]) { for (int row = 0; row < max_row; row++

  • C语言实现循环双链表

    本文实例为大家分享了C语言实现循环双链表的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef int DataType; typedef struct Node { DataType data; // 数据域 struct Node * prior; // 前趋指针 struct Node * next; // 后继指针 }LinkList; LinkLis

  • C语言每日练习之乒乓球比赛问题

    目录 题目描述 分析 代码实现 后期完善 网上参考 解法一: 解法二: 总结 题目描述 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单 分析 简单的组合问题,而且不考虑排序,如果固定a,b,c分别在0-2三个比赛队伍,那么两球队最多3种组合方式,全部轮询一遍即可. 代码实现 代码写的有点糟 #include <stdio.h> int main() { in

  • C语言每日练习之统计文本单词数及高频词

    作业1:统计出txt文本里面的单词数,并找出频率出现最高的单词是哪个? 运行结果: 上代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //文件打开 //string file = System.IO.Fi

  • C语言每日练习之动态显示系统时间

    目录 分析 代码实现 1.简易版 2.自定义格式版 3.格式化输出版 4.精细版(毫秒+微秒) 网上参考 总结 分析 C语言的时间库函数基本都在time.h里,该头文件主要包含三种形式的时间量,一种是time_t类型(原型为long),表示当前时间到1970年1月1日的总秒数:一种是struct tm类型,里面是时间日期的数据:还有一种clock_t,这个类型本文用不到,它表示与处理器时钟有关的时间数据. 本文将介绍4种显示系统时间的方法: 第一种直接用ctime函数将time_t类型的秒数据转

  • C语言每日练习之进制转换

    目录 分析 代码实现 网上参考 总结 分析 我一开始的想法是通过输入整数形式八进制来转换成十进制输出,后来发现用字符数组输入更方便.我这里就讲讲我用整型数据输入的转换思路: 我们都知道二进制由0和1组成,3位二进制组成在一起,就可以表示0-7这八个数,所以八进制实际上就是3位二进制的组合(同理十六进制是4位二进制的组合),C语言的位运算操作的是二进制,算术运算针对的是十进制,所以,我们可以通过位运算求出八进制的每一位数(3位二进制为1位),然后通过算术运算符+,将他们加起来.和十进制运算不同的地

  • C语言每日练习之二叉堆

    目录 一.堆的概念 1.概述 2.定义 3.性质 4.作用 二.堆的存储结构 1.根结点编号 2.孩子结点编号 3.父结点编号 4.数据域 5.堆的数据结构 三.堆的常用接口 1.元素比较 2.交换元素 3.空判定 4.满判定 5.上浮操作 6.下沉操作 四.堆的创建 1.算法描述 2.动画演示 3.源码详解 五.堆元素的插入 1.算法描述 2.动画演示 3.源码详解 五.堆元素的删除 1.算法描述 2.动画演示 3.源码详解 总结 一.堆的概念 1.概述 堆是计算机科学中一类特殊的数据结构的统

  • C语言每日练习之字符串反转

    目录 分析 代码实现 网上参考 总结 分析 在第18天:利用递归函数调用方式,将所输入的字符以相反顺序打印出来中,已经用过递归实现字符顺序输入,逆序输出,今天的题目是字符串反转,将以字符数组的形式来进行操作. 代码实现 #include <stdio.h> #include <string.h> #define MAX_LENGTH 50 //最大长度 char *String_Invertion(char *str); int main() { char string[MAX_L

  • C语言每日练习之求两个矩阵的乘积详解

    目录 分析 代码实现 总结 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中. 矩阵的乘法有以下注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和. 代码实现:只需要用矩阵乘积的公式求出新的矩阵,即为两个矩阵的乘积,程序中

  • C语言每日练习之冒泡排序

    目录 分析 代码实现 运行结果 总结 分析 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 冒泡排序(这里只讨论从小到大排序)可以通过二种方式实现,分别是将最小值依次移动到头部和将最大值依次移动到尾部. 代码实现 代码采用从数组头部轮询的方式: #include <stdio.h> #define INTEGER_RANGE 10 //数字范围 void bubule_sort(int *array, int len); int main() { int i =

  • C语言每日练习之选择排序

    目录 分析 代码实现 总结 分析 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的个数为零.选择排序是不稳定的排序方法.--百度百科 代码实现 #include <stdio.h> #define INTEGER_RANGE 10 //数字范围 void select_so

随机推荐