一个发送带附件email的python脚本

从python.org上抄的。 

Read more

穷举4阶幻方

思路:

  1. 对于第一行的第1个元素,是1~16;第2个要选此之外的,只有15个可选。第三个只有14个可选。第四个,只有一个选择,即平均数减去1,2,3。
  2. 第2,3行的最后一个同理。
  3. 第4行每一个元素均由其同列元素决定。
  4. 这些“被决定”的值不得小于0,以免出现负数。�除

代码:

Read more

穷举3阶幻方

最笨的办法,一一枚举。

Read more

命题逻辑:谁出国?

题目见清华版《离散数学》(李俊锋、冯刚)P47:

某单位要安排甲乙丙丁中的2人出国考察。在下面的几条要求下,有几种安排方案?编程验证。

  1. 若甲去,则丙和丁要去一人。
  2. 乙和丙不能同去。
  3. 若丙去,则丁不能去。

Read more

中缀表达式转后缀表达式之桟操作版

感觉这个小问题还挺有用的。我在研究正则表达式源码时又遇到一次。于是使用紙笔写个程序,演算无误。打开清华版的数据结构一书113页,思路暗同。借用了清华书的isp与icp函数。

Read more

中缀表达式转后缀表达式之STL版

思路与中缀表达式转后缀表达式的一样,只不过使用stl作为容器而已。代码见下。 

Read more

python语言扑克发牌

代码:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#latest edit: 2009.06.19 
 
#to ensure the utf8 encoding environment
import sys
import random

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)


n=52
def gen_pocker(n):
    list=range(n)   #	the source list
    pocker=[0 for i in range(n)]    #the target list
    x=n
    while(x>0):
        x=x-1
        p=random.randint(0,x)
        pocker[x]=list[p]
        del list[p]
    return pocker

def getColor(x):
    color=["黑桃","红桃","草花","方块"]
    c=int(x/13)
    if c<0 or c>=4:
        return "ERROR!"
    return color[c]


def getValue(x):
    value=x % 13
    if value==0:
        return 'A'
    elif value>=1 and value<=9:
        return str(value+1)
    elif value==10:
        return 'J'
    elif value==11:
        return 'Q'
    elif value==12:
        return 'K'

def getPuk(x):
    return getColor(x)+getValue(x)

(a,b,c,d)=([],[],[],[])

pocker=gen_pocker(n)

for x in range(13):
    m=x*4
    a.append(getPuk(pocker[m]))
    b.append(getPuk(pocker[m+1]))
    c.append(getPuk(pocker[m+2]))
    d.append(getPuk(pocker[m+3]))
a.sort()
b.sort()
c.sort()
d.sort()
for x in a:
    print x
print     ""
for x in b:
    print x
print     ""    
for x in c:
    print x
print     ""    
for x in d:
    print x

 

 

生成的一组牌为:

方块J
方块K
红桃5
红桃6
红桃J
草花4
草花9
草花J
草花K
黑桃2
黑桃8
黑桃9
黑桃K

方块10
方块2
方块3
方块7
方块8
方块9
方块Q
红桃7
红桃8
红桃9
草花6
草花Q
黑桃3

方块4
方块6
红桃10
红桃2
红桃4
红桃Q
草花10
草花3
黑桃10
黑桃7
黑桃A
黑桃J
黑桃Q

方块5
方块A
红桃3
红桃A
红桃K
草花2
草花5
草花7
草花8
草花A
黑桃4
黑桃5
黑桃6

逻辑联接词之合取

c语言提供了几个位操作符,其中:

  • bitwise AND operator: &
  • bitwise Exclusive OR operator: ^
  • bitwise Inclusive OR operator: |

其结合力是依次递减的。

清华版《离散数学》(9787302130666),第1.2.2的合取、析取,使用c语言实现是:

#include<stdio.h>


//条件:设p与q是两个命题,若p则q
//只有当p为1,q为0时返回0值,其余返回1.
tiaojian(p,q)
{
    return (p && !q)?0:1;
}

//双条件:设p与q是两个命题,p当且仅当q,p的充分必要条件是q
//当且仅当p与q同为0或同为1时返回1,其余返回0
shuangtiaojian(p,q)
{
    return ((p && q)||(!p && !q))?1:0;
}

main()
{
    int p,q;
    printf("P\tQ\tP合取Q\t排斥或\t可兼或\t条件\t双条件\n");
    for(p=0;p<=1;p++)
    {
        for(q=0;q<=1;q++)
        {
            printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p,q,p&q,p^q,p|q,tiaojian(p,q),shuangtiaojian(p,q));
        }
        //printf("\n");
    }
}

 

输出结果: