07:python常见算法题

1、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
sum=0
for i in range(1,5,1):
    for j in range(1,5,1):
        for k in range(1,5,1):
            if i!=j and i!=k and k!=j :
                sum=sum+1
                print i,j,k  # 这里去重
print sum

demo.py

 2、求n的阶乘

#! /usr/bin/env python
# -*- coding: utf-8 -*-
def f(n):
    if n == 1:
        return 1
    else:
        return n * f(n-1)
print f(3)  # 6

‘‘‘ 推演:
3   # 递归第一层 n=3:f(3) 入栈:【f(3),】
2   # 递归第二层 n=2:f(2) 入栈:【f(3), f(2)】
1   # 递归第三层 n=1
######## 递归到此时 n=1 不满足递归条件开始出栈  ##########
【n:2】【ret:2】 f(2) = 2 * f(1) = 1 * 2
【n:3】【ret:6】 f(3) = 3 * f(2) = 3 * 2 * 1
‘‘‘

求阶乘:递归

111111111

原文地址:https://www.cnblogs.com/xiaonq/p/10451197.html

时间: 2024-07-29 20:44:20

07:python常见算法题的相关文章

常见算法题合辑(一)

这一章的内容,有些之前已经在微信公众号中将详细的思路及步骤汇总过,有些之后可能会再找时间对其进行分析,这里只将最终实现罗列出来,难易程度不分先后,算法复杂度不保证是最优,留给大家空间自行思考,当然,本章用的是C#语言进行编码,大家可以使用自己熟悉的语言将这些算法实现一遍哦~ 如果你有什么有趣的算法题或者没能解决的算法题,也可以留言给小编,让我们一起玩转算法~ 1. 冒泡排序 这个算是所有算法中最为简单的了,实现方法如下: 2. 插入排序 从排序算法来看,这个算法也是属于比较简单的了,实现方法如下

python基本算法题(一)

1.3位水仙花数计算 "3位水仙花数”是指一个三位整数,其各位数字的3次方和等于该数本身. 例如: ABC是一个“3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC. 使用Python,输出所有的3位水仙花数. >>> for i in range(100,1000): if pow(i // 100 , 3) + pow(i % 10 , 3) + pow(i // 10 % 10, 3) == i: print(i,end=" ") &g

python 常见算法

python虽然具备很多高级模块,也是自带电池的编程语言,但是要想做一个合格的程序员,基本的算法还是需要掌握,本文主要介绍列表的一些排序算法 递归是算法中一个比较核心的概念,有三个特点,1 调用自身 2 具有结束条件 3 代码规模逐渐减少 举例:以下四个函数只有两个为递归 func3和func4 但是输出是不同的比如func3(5)输出为5,4,3,2,1func4(5)输出为1,2,3,4,5,有一个递归层级在里面. 两个概念:时间复杂度和空间复杂度 时间复杂度:用于体现算法执行时间的快慢,用

常见算法题:判断表达式括号是否匹配

题目:设计一个算法,判断用户输入的表达式中括号是否匹配,表达式中可能含有圆括号.中括号和大括号. 思路:建立一个顺序栈,当表达式中有左括号时将其入栈,当出现右括号时,将栈顶元素出栈,检查与当前右括号是否匹配.最后如果栈为空则表示该表达式中的括号是匹配的. 代码: #include<iostream> #include<string> using namespace std; #define MaxSize 20 //字符串栈 class Stack { char *data; in

JAVA常见算法题(五)

package com.xiaowu.demo; /** * 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. * * * @author WQ * */ public class Demo5 { public static void main(String[] args) { score(90); } public static void score(int n) { char s = n >= 90 ? 'A' : (n

常见算法题:逆置单链表

思路:使用头插法建立单链表,每插入一个节点都插在头结点之后,先使头结点指向NULL,再将剩余结点使用头插法建表,即可实现单链表逆置. 代码: 设目标单链表L,结点为int类型 void Reverse(LinkList &L) { int *p = L.head->next,*q; L.head->next = NULL; while(p!=NULL) { q = p->next; p->next = L.head->next; L.head->next = p

常见算法题:单链表二路归并

题目:现有两个递增的单链表L1和L2,设计一个算法将L1与L2的所有结点归并到递增的单链表L3中.要求:空间复杂度为O(1). 思路:本题可采用二路归并思路,但题目要求空间复杂度为O(1),因此不能复制结点,只能破坏L1和L2将结点插入到L3中. 代码: void Merge(LinkList &L1,LinkList &L2,LinkList &L3) { LinkList *p=L1.head->next, *q=L2.head->next; LinkList *p

JAVA常见算法题(二十七)

题目:给定一个存放整数的数组,请写一个算法,把偶数移动到该数组的右边,奇数放在该数组的左边,请考虑时间和空间的最优算法. package com.forezp.util; /** * 题目:给定一个存放整数的数组,请写一个算法, * 把偶数移动到该数组的右边,奇数放在该数组的左边,请考虑时间和空间的最优算法. * * @author Administrator * */ public class ArrayDemo { //判断是否为偶数 public static boolean isEven

JAVA常见算法题(二十八)

package com.forezp.util; import java.util.Arrays; /** * 两个int数组,都是从小到大的的排列,请合并为一个新的数组,也是从小到到大的排列, * 请写出性能最优的算法.<br> * * * * @author Administrator * */ public class ArrayDemo1 { public static void main(String[] args) { int[] a = { 1,3,5,7,9}; int[] b