求符合给定条件的整数集

PTA 基础编程题集 7-16

题目: 给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。*

输入格式:
输入在一行中给出A。

输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。(输出要以升序的方式)

可能有多种解法,这里提供一种方法,以供学习交流,可能没有那么易懂,但起初想到了这个思路,就试着写了一下。

先说思路:
输入一个整数——>得到这个整数的后三位——>存进数组1;
创建另外2个数组,数组2和数组3,内容和数组1相同;

(输出是三位数,不妨利用四则运算得到结果存进数组4,最后直接输出数组4就好了)

数组1 ——> 百位
数组2 ——> 十位
数组3 ——> 个位
数组4 ——> 标记

假设输入为 1,则数组为 1 2 3 4

具体实现来看代码:

//求整数集
//给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
//考虑的解法:构建三个数组,一个标记的数组
//三个数组分别代表 百位、十位、个位
#include <stdio.h>
#include <stdbool.h>
#define ST 4
#define MAX 100
struct Node{        //  数据数组 int data[ST];int cnt;
};
struct Mark{        //标记数组 int receive[MAX];int cnt;        //当前位置
};
void init_array(int* p){    //初始化数组 int i; for(i=0;i<ST;i++){*(p+i) = 0;}
}
bool all_mark_one(int* p){      //判断标记数组re_mark 是否全都为1 if(*p==*(p+1)==*(p+2)==*(p+3)==1){        //都为1 ,返回true,否则返回falsereturn true;}else{return false;}
}
void updata_array(int* p,int num_high){     //更新标记数组,把除了高位的数字以外,mark数组全部更新为 0 int i;for(i=0;i<ST;i++){if(i==num_high){*(p+i) = 1;}else{*(p+i) = 0;}}
}
int main(void)
{struct Node data_bai;      //百位 struct Node data_shi;      //十位 struct Node data_ge;       //个位 struct Mark output;int re_mark[4]={0};output.cnt = 0;int i,j,k;scanf("%d",&data_bai.data[0]);      //给第一个位置赋值 data_bai.cnt = 0;output.cnt = 0;for(i=1;i<ST;i++){       //后面三个依次 +1 data_bai.data[i] = data_bai.data[i-1] + 1;}data_shi = data_bai;data_ge = data_bai;for(i=0;i<ST;i++){ //第一位 init_array(re_mark);      //初始化标记数组 re_mark[i] = 1;      //令当前使用过的位数为 标记 为 1 data_bai.cnt = i;//output.receive[output.cnt] = 100 * data_bai.data[i];   //相乘 for(j=0;j<ST;j++){if(re_mark[j]==1){continue;}else{data_shi.cnt = j;//output.receive[output.cnt] += 10* data_shi.data[data_shi.cnt];re_mark[j] = 1;for(k=0;k<ST;k++){if(re_mark[k]==1){continue;}else{data_ge.cnt = k;output.receive[output.cnt] = data_bai.data[data_bai.cnt]*100 + data_shi.data[data_shi.cnt]*10 + data_ge.data[data_ge.cnt];re_mark[k] = 1;++output.cnt;if(!all_mark_one(re_mark)){     //如果标记中不全为1 ,则重复循环 continue;}else if(all_mark_one(re_mark)){     //如果全为 1 ,则一定走完了一个流程,更新数组updata_array(re_mark,data_bai.cnt);      //更新标记数组break;      //跳出当前循环}}}}}re_mark[i] = 0;       // i 每次走完一轮,令当前所走的数字由1 转变为 0,然后下一个i为1,腾出re_mark的标记空间}for(i=0;i<output.cnt;i++){      //每行6个整数。整数间以空格分隔,但行末不能有多余空格。printf("%d",output.receive[i]);if((i+1)%6!=0){printf(" ");}else{if(i==output.cnt-1){}else{printf("\n");}}}}
//输入 2
//结果
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543

【C语言】求符合给定条件的整数集相关推荐

  1. C语言---求符合给定条件的整数集

    要求:给定不超过6的正整数A,考虑从A开始的连续4个数字,请输出所有由他们组成的无重复数字的三位数. 输入格式:在一行中输入A 输出格式:输出满足条件的三位数,要求从小到大,每行六个整数.整数间以空格 ...

  2. PTA 基础编程题目集 7-16 求符合给定条件的整数集 C语言

    PTA 基础编程题目集 7-16 求符合给定条件的整数集 C语言 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出 ...

  3. C语言入门:求符合给定条件的整数集

    C语言:求符合给定条件的整数集 给定不超过6的正整数,考虑从A开始的连续4个数字.请输出所有由他们组成的无重复数字的3位数 输入格式:输入在一行中给出A 输出格式:输出满足条件的3位数,要求从小到大, ...

  4. 用C语言解“求符合给定条件的整数集”题

    7-16 求符合给定条件的整数集 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的3位数, ...

  5. 求符合给定条件的整数集

    求符合给定条件的整数集 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的3位数,要求从小到 ...

  6. 用Python解“求符合给定条件的整数集”题

    7-16 求符合给定条件的整数集 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的3位数, ...

  7. C语言编程练习:求符合给定条件的整数集

    文章目录 题目描述 思路 结果 题目描述 题目: 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式∶ 输入在一行中给出A. 输出格式︰ 输出满足 ...

  8. 求符合给定条件的整数集(PTA题库)

    题目 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的3位数,要求从小到大,每行6个整数. ...

  9. 7-16 求符合给定条件的整数集

    给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的3位数,要求从小到大,每行6个整数.整数间 ...

最新文章

  1. java用毫秒数做日期计算的一个踩坑记录
  2. PyTorch 1.5 发布,与 AWS 合作 TorchServe
  3. nginx部署与小程序配置
  4. IntelliJ IDEA 对于generated source的处理
  5. filter IE滤镜(Internet Explorer)CSS
  6. 不同操作系统的user data存放目录
  7. java识别验证码图片_Java识别图像、验证码
  8. LambdaQueryWrapper的不同写法
  9. pip install XXX总是报错,例如:Exception: Traceback (most recent call last):这种错误怎么办?
  10. 把一个人的特点写具体作文_把一个人的特点写具体
  11. 第6章 IT服务运营管理
  12. java贪吃蛇(障碍物*咬尾巴)
  13. 基本Kmeans算法介绍及其实现
  14. Nodejs用户登录,退出案例
  15. 将表格数据转为JSON
  16. DirectX 3D基础复习
  17. 忠告27:拉里。埃里森:学习是贯穿一生的事情
  18. OGame银河系说明
  19. 中科大的AI图像/视频编解码综述
  20. NAS激励计划DAPP创建与运行教程

热门文章

  1. 面试Java遇到的尴尬问题
  2. C++GUI之wxWidgets(2)-hello,world
  3. Java 日历类 Calendar
  4. 【RK3568调试记】给RK809添加音量调节功能
  5. Matlab基本函数 length函数
  6. 机器码、字节码、汇编语言的区别
  7. matlab 2016a 破解教程
  8. 【优化调度】基于matlab遗传算法求解农业水资源调度优化问题【含Matlab源码 1776期】
  9. 【JVM】本地方法栈与堆与方法区
  10. 【Java mail 入门教程】第三讲 接收邮件