C语言中组成不重复的三位数问题

目录
  • C语言组成不重复的三位数
    • (1)通用思路
    • (2)排除思路
  • 打印1234组成的不重复三位数

C语言组成不重复的三位数

对于这个问题,我有两种解决思路

  • 第一种较为简单
  • 第二种较为复杂

(1)通用思路:根据数组中的数字自由组合成三位数

(2)找出最小数和最大数并以此为循环边界(目的在于缩小循环的范围,提高效率),之后根据不断循环,将不符合要求的数字排除,在某些题中会简便许多

·由1,2,3,4组成的不重复的三位数

(1)通用思路

#include <stdio.h>
 
int main()
{
    int a[4]={1,2,3,4};
    int i,j,k,count=0;
    for (i=0;i<4;i++)
    {
        for (j=0;j<4;j++)
        {
            for (k=0;k<4;k++)
                if (i!=j&&i!=k&&k!=j)
                printf("%d\n",a[i]*100+a[j]*10+a[k]); 
        }
    }
    return 0;
} 

(2)排除思路

#include <stdio.h>
 
int main()
{
    int a[3],i,j,k;
    for (i=123;i<=432;i++)
    {
        int word = 1;
        a[0]=i%10;a[1]=i/10%10;a[2]=i/100;
        for (j=0;j<3;j++)
        {
            if (a[j]==1||a[j]==2||a[j]==3||a[j]==4)
            {
            for (k=0;k<3&&j!=k;k++)
            {
                if (a[k]==a[j])
                {
                    word = 0;
                    break;
                }
            }
            }
           else
           {
                word = 0;
                break;
           }
        
        if (word == 0)
            break;
    }
 
        if (word)
        printf("%d\n",i);
    }
    return 0;
}

·某些题(适用于排除思路)

用1,2,3,.....,9组成三位数abc,def,ghi,每个数字恰好使用一次,要求 abc:def:ghi=1:2:3.按照“abc def ghi”的格式输出所有解,每行一个解。

#include <stdio.h>
 
int main()
{
    int abc,def,ghi;
    int i,k,a[9],word =1;
    for (abc=123;abc<=329;abc++)
    {
        def = abc * 2;
        ghi = abc * 3;
        a[0]=abc%10;a[1]=abc/10%10;a[2]=abc/100;
        a[3]=def%10;a[4]=def/10%10;a[5]=def/100;
        a[6]=ghi%10;a[7]=ghi/10%10;a[8]=ghi/100;
        for (k=0;k<9;k++)
        {
            word = 1;
            for (i=0;i<9&&i!=k;i++)
            {
                if (a[k]==a[i]||a[i]==0)
                {
                    word = 0;
                    break;
                }
            }
            if (word == 0)
            break;
        }
        if (word)
        printf("%d,%d,%d\n",abc,def,ghi);
        
    }
}

打印1234组成的不重复三位数

1、每位数都遍历一次,就是个位出现1234,十位出现1234,百位出现1234

2、去重复,个位十位百位不能相等

3、复合式遍历,统计这种遍历得到了多少回

var count = 0;
for(i=1;i<=4;i++){
    for(j=1;j<=4;j++){
        for(k=1;k<=4;k++){
            if(i!=j && j!=k && k!=i){
            count++;
            console.log(i+""+j+""+k);
            }
        }
    }
}
console.log("这样的三位数有"+count+"个");

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言程序设计50例(经典收藏)

    [程序1]题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: 复制代码 代码如下: #include "stdio.h"#include "conio.h"main(){  int i,j,k;  printf("\n");  for(i=1;i<5;i++) /*以下为三重循环*/   

  • c语言10个经典小程序

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: 复制代码 代码如下: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&a

  • c语言分离三位数的实现

    目录 c语言分离三位数 c语言数字分离 题目 初级代码 第二种方法,可以用数组 c语言分离三位数 #include<stdio.h> main(){ int k,l,m,n; printf("请输入一个三位数"); scanf("%d",&k); l=k/100; m=k/10%10; n=k%10; printf("这个三位数的百位是:%d\n",l); printf("这个三位数的十位是:%d\n",m

  • C语言中组成不重复的三位数问题

    目录 C语言组成不重复的三位数 (1)通用思路 (2)排除思路 打印1234组成的不重复三位数 C语言组成不重复的三位数 对于这个问题,我有两种解决思路 第一种较为简单 第二种较为复杂 (1)通用思路:根据数组中的数字自由组合成三位数 (2)找出最小数和最大数并以此为循环边界(目的在于缩小循环的范围,提高效率),之后根据不断循环,将不符合要求的数字排除,在某些题中会简便许多 ·由1,2,3,4组成的不重复的三位数 (1)通用思路 #include <stdio.h>   int main()

  • JavaScript中数组去除重复的三种方法

    废话不多说了,具体方法如下所示: 方法一:返回新数组每个位子类型没变 function outRepeat(a){ var hash=[],arr=[]; for (var i = 0; i < a.length; i++) { hash[a[i]]!=null; if(!hash[a[i]]){ arr.push(a[i]); hash[a[i]]=true; } } console.log(arr); } outRepeat([2,4,4,5,"a","a"

  • 漫画讲解C语言中最近公共祖先的三种类型

    最近公共祖先定义 查找最近公共祖先 三叉链 代码如下: //三叉链 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode *parent; TreeNode(int x) : val(x), left(NULL), right(NULL), parent(NULL) {} }; class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* ro

  • Python输出由1,2,3,4组成的互不相同且无重复的三位数

    题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码 方法1: #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1,5): for j in range(1,5): for k in range(1,5): if( i != k ) and (i != j) and (j != k):

  • JS判断数组中是否有重复值得三种实用方法

    方法一: 复制代码 代码如下: var ary = new Array("111","22","33","111"); var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace(ary[i]+",","").indexOf(ary[i]+",&qu

  • C语言中对数组赋值的三种形式

    前言 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 在C语言中,对数组进行赋值的三种形式 方法如下: 1.通过循环的形式     即:数组名[下标]      对数组的元素进行依次赋值 #include <stdio.h> int main() { int i; int a[10] = {0}; for(i=0;i<10;i++) { scanf("%d",&a[i]

  • C语言中的三种循环语句

    目录 一.while循环 二.do while 循环 三.for 循环 一.while循环 while即:首先检查启动循环的条件是否满足,当条件满足时,不断地重复循环体内的语句,直到不满足条件就退出. while循环基本形式: while(条件) { <循环体>; <循环体>; } eg: 1 //输入任意个int型,整数并判断其位数#include int main() { int x; intn=0; scanf("%d",&x); n++; x /

  • C语言中斐波那契数列的三种实现方式(递归、循环、矩阵)

    目录 一.递归 二.循环 三.矩阵 <剑指offer>里讲到了一种斐波那契数列的 O(logN) 时间复杂度的实现,觉得挺有意思的,三种方法都记录一下. 一.递归 一般来说递归实现的代码都要比循环要简洁,但是效率不高,比如递归计算斐波那契数列第n个元素. long long Fibonacci_Solution1(unsigned int n) { // printf("%d ", n); if (n <= 0) return 0; if (n == 1) retur

  • C语言中函数指针的三种使用方法总结

     C语言中函数指针的三种使用方法总结 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长. 定义方式:int (*p)(int x, int y); 实现代码: #include <stdio.h> int sum(int x, int y){ return x + y; } int reduce(int x, int y){ return x - y; } int

  • C/C++语言中全局变量重复定义问题的解决方法

    前言 在C语言中使用extern 关键字来定义全局变量的时候,我们需要在.h文件和.c文件中重复定义,这种重复,导致了出错几率的增加. 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面.于是,想把自己的代码中的各个模块分离开来,以便更好地阅读和管理. 遇到的问题 我的做法是: 宏定义.结构体定义.函数声明以及全局变量定义放到一个head.h头文件中 函数的定义放到head.cpp中 main函数放到main.cpp中 然而却报错了,提示xxx变量在*.obj文件中已

随机推荐