【源码】用1,2,2,3,4,5这六个数字,写一个函数,打印出所有不同的排序,要求:4不能放在第三位,3与5不能相连(C语言实现)

帮朋友做的,好像是一个面试题。暴力方式。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//判断这个数是不是由1、2、2、3、4、5几位数字组成
int func(int n)
{
    int a[5] = {0};
    for(int i = 0; i < 6; i++)
    {
        int bit = n % 10;
        n /= 10;
        switch(bit)
        {
        case 1:
            a[0]++;
            break;
        case 2:
            a[1]++;
            break;
        case 3:
            a[2]++;
            break;
        case 4:
            a[3]++;
            break;
        case 5:
            a[4]++;
            break;
        default:
            break;
        }
    }

    return a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 1 && a[4] == 1;
}

//判断第三位是不是4
int isNotFour(int n)
{
    int tBit = 0;
    for(int i = 0; i < 4; i++)
    {
        tBit = n % 10;
        n /= 10;
    }
    return tBit != 4;
}

int main()
{
    for(int i = 122345; i <= 543221; i++){
		if( func(i) )
		{
            char s[7];
            itoa(i, s, 10);
			if(!strstr(s, "35") && !strstr(s, "53") && isNotFour(i) )
            {
				printf("%d\n", i);
			}
		}
	} 

    system("pause");
    return 0;
}

【源码】用1,2,2,3,4,5这六个数字,写一个函数,打印出所有不同的排序,要求:4不能放在第三位,3与5不能相连(C语言实现),布布扣,bubuko.com

时间: 2025-01-02 18:23:05

【源码】用1,2,2,3,4,5这六个数字,写一个函数,打印出所有不同的排序,要求:4不能放在第三位,3与5不能相连(C语言实现)的相关文章

【源码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)

帮朋友做的,好像是一个面试题.如果仅仅是考察递归的话,应该是够了,程序的健壮性和通用性都很一般的说-- #include <stdio.h> #include <stdlib.h> int count = 0; void myRevert(int n, int a[]) { if(n < 10) { a[count++] = n; } else { a[count++] = n % 10; myRevert(n / 10, a); } } int main() { int n

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <

【原创】源码角度分析Android的消息机制系列(六)——Handler的工作原理

ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 先看Handler的定义: /** * A Handler allows you to send and process {@link Message} and Runnable * objects associated with a thread's {@link MessageQueue}. Each Handler * instance is associated with a single thread and that thre

用C语言写一个函数返回参数二进制中1的个数

首先,给出正确的C语言代码如下: #include <stdio.h> int count_one_bits(unsigned int value) { int count =0; while(value) { if(value%2==1) { count++; } value=value/2; } return count; } int main() { unsigned int num=0; int ret=0; scanf("%d",&num); ret=co

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head

【C语言】写一个函数,实现字符串内单词逆序

//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <string.h> #include <assert.h> void reverse_string(char *left, char *right) //连续的字符串逆序 { char temp; while (right > left) { temp = *left; *left = *rig

用c语言写一个函数把十进制转换成十六进制(转)

#include "stdio.h" int main() { int num=0;int a[100]; int i=0; int m=0;int yushu; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};printf("请输入一个十进制整数:"); scanf("%d",&num); while(num>0) { y

AFNetworking 3.0 源码解读 总结

终于写完了 AFNetworking 的源码解读.这一过程耗时数天.当我回过头又重头到尾的读了一篇,又有所收获.不禁让我想起了当初上学时的种种情景.我们应该对知识进行反复的记忆和理解.下边是我总结的 AFNetworking 中能够学到的知识点. 1.枚举(enum) 使用原则:当满足一个有限的并具有统一主题的集合的时候,我们就考虑使用枚举.这在很多框架中都验证了这个原则.最重要的是能够增加程序的可读性. 示例代码: /** * 网络类型 (需要封装为一个自己的枚举) */ typedef NS

教你如何剖析源码

一.源码阅读需求 在学习中,我们会需要了解,学习,使用一个框架,一个新的函数库.在工作中,因为业务需求,因为性能问题,可能通过一个更高性能的工具,架构去优化我们的程序. 那么,问题就来了.网站下载了源码,目录一层一层,头文件无数,打开之后又是一个函数上百行代码,一个类可能有近千行代码.看着都崩溃了,只想关机去静静. 那么,现在.就谈谈如何阅读源码的问题了. 二.源码阅读方法 认知过程: ①了解库/框架的功能-->具体做法:找到相关文档或者书籍,获取库/框架的功能简介.知道他是干什么的.(相关知识