精华内容
下载资源
问答
  • 【题 目】输入一个整数n,求1n这n正数中,1出现的次数。例如:输入12,出现的数字...我们可以遍历1n的每一个数字k,对于k我们计算出它其中包含的1的个数,方法其实很简单,只需要分别判断位,十位,...

    【题 目】输入一个整数n,求从1到n这n个正数中,1出现的次数。例如:输入12,出现一的数字有1,10,11,12共有5个1,则输出5.

    【思 路1】几乎所有的算法题目都有很直观容易想到的方法,当然这类方法的效率通常都不是很好,然而解决问题是第一要义。所以还是从最容易想到的入手。我们可以遍历从1到n的每一个数字k,对于k我们计算出它其中包含的1的个数,方法其实很简单,只需要分别判断个位,十位,百位,千位等的每一位是否为1,然后用计数器记录就OK了。这种思路很简单,我们很容易就可以写出如下的代码:

    1 #include

    2 #include

    3 using namespace std;

    4

    5 //返回任意一个整数k中包含的1的个数6 int NumbersOf1s(unsigned int k)

    7 {

    8 int cnt = 0;

    9 while(k)

    10 {

    11 //该位是1,计数器就加1;12 if(k % 10 == 1)

    13 cnt++;

    14

    15 k = k / 10;

    16 }

    17

    18 return cnt;

    19 }

    20

    21 //返回从1到n的n个整数中所包含的1的个数22 int NumbersOf1sFrom1ToN(unsigned int n)

    23 {

    24 if(n < 0)

    25 return 0;

    26

    27 int count = 0;

    28 for(int i = 1;i <= n;i++)

    29 {

    30 count += NumbersOf1s(i);

    31 }

    32

    33 return count;

    34 }

    35

    36 int main()

    37 {

    38 cout<<"Please Enter the number N:"<

    39 unsigned int number = 0;

    40 cin>>number;

    41

    42 cout<<"The Numbers of 1 From 1 to N is:"<

    43 cout<

    44

    45 return 0;

    46 }

    运行结果如下:

    2011121422261441.png

    【思 路2】上述算法的效率不是很好,尤其对于n非常大的情况,这种算法花费的时间很长。其实我们并不需要对于每一个数字计算出它包含的1的个数,我们可以逐位考虑,所有1的个数等于个位上1的个数+十位上1的个数+百位上1的个数+千位上1的个数+。。。接下来的问题,就是如何求解这些位上1的个数?

    首先,我们有如下比较容易得到的结论,0-9中1的个数是1个,0-99中十位(10-19)上1的个数是10,0-999中百位上(100-199)上1的个数是100,以此类推。为什么需要这些数字,我们经过简单罗列,很容易发现:个位上1的个数,实际上和这个数字包含多少个10有关,因为对于个位来说,总是从0-9循环,十位上1的个数,实际上和这个数字包含多少个100有关,因为每包含1个100,就有0-99的循环,而0-99中十位上的1是10个;那么关系究竟是什么呢?我们看下面的例子来理解:

    对于数字123:

    123/10=12,包含12个10,每个10包含1个1(个位1)所以个位共包含12*1=12个1;余数的情况后面单独讨论;

    123/100(或者12/10)=1,包含1个100,每个100包含10个1(十位1),所以十位共包含1*10=10个1;余数的情况后面单独讨论;

    123/1000(或者1/10)=0,包含0个1000,每个1000包含100个1(百位1),所以百位共包含0*100=0个1;余数的情况后面单独讨论;

    现在考虑余数的两种情况:

    (1)余数大于1的情况:

    数个位时,余数3大于1;所以个位上1的个数要+1;

    数十位时,余数2大于1;因为增加了100-120之间(10-19)的数字即110-119,所以十位上1的个数要+10;

    (2)余数等于1的情况:

    数百位时,余数等于1;我们应该增加100-123这24个数字中百位上的1,共计24个;

    在上面的计算中我们发现123/1000=0包含0个1000,所以百位包含0*100个1,这是常规的情况,实际上由于百位为1,从100到n(123)中还应增加:123-100+1个1.

    总结上面的情况:就是对于每一位(个位,十位,百位),我们计算他们“通常”情况下(即该数字包含多少个10,100,1000乘以对应的1的个数)包含的1的个数+该位上余数大于1(等于1)的情况下包含的1的个数 = 该位上1的总个数,所有的位遍历,求和,就OK了。根据这种思路我们可以得到如下的代码:

    1 #include

    2 #include

    3 using namespace std;

    4

    5 int NumbersOf1sFrom1ToN(unsigned int n)

    6 {

    7 int currentN = n;

    8

    9 //计数器10 int cnt = 0;

    11

    12 //商,计算该数字包含多少个10,100,1000等13 int quotient = 0;

    14

    15 //余数,计算除去“整”的包含,剩下的数字包含的1的个数16 int remainder = 0;

    17

    18 //每一轮循环中的权重,分别记录10,100,1000中包含多少个位1,十位1,百位1;19 int mult = 1;

    20

    21 while(currentN)

    22 {

    23 quotient = currentN / 10;

    24 remainder = currentN % 10;

    25

    26 //包含多少个10,100,1000,乘以对应的数量的个位1,十位1,百位127 cnt += quotient * mult;

    28

    29 //余数大于1,多加一个该轮下的权重30 if(remainder > 1)

    31 {

    32 cnt += mult;

    33 }

    34 //余数等于135 else if(remainder == 1)

    36 {

    37 cnt += n - currentN * mult + 1;

    38 }

    39

    40

    41 currentN = currentN / 10;

    42 mult *= 10;

    43 }

    44

    45 return cnt;

    46 }

    47

    48 int main()

    49 {

    50 cout<<"please enter the number N:"<

    51 unsigned int number = 0;

    52 cin>>number;

    53

    54 cout<<"the number of 1s From 1 to N is:"<

    55 cout<

    56

    57 return 0;

    58 }

    运行结果如下:

    2011121423325917.png

    References:

    注:

    1)本博客所有的代码环境编译均为win7+VC6。所有代码均经过博主上机调试。

    2)博主python27对本博客文章享有版权,网络转载请注明出处http://www.cnblogs.com/python27/。对解题思路有任何建议,欢迎在评论中告知。

    展开全文
  • 侵删)图中大家可以看到,在每个考试部分的分数下方,都两排小字,这个就是在告诉你:你这次这部分的成绩是第多少个percentilePercentile的中文翻译叫做百分位数,是个统计学术语,定义为:百科如果将组数据...

    519664d60d60e46443181bf23200994a.png

    今天我们来说一个GRE数学考点,也就是一个在GRE成绩单上会出现的一个统计概念——percentile

    9aef9c49f35f6b0790b87032d7d603c3.png
    (图片来源网络,侵删)

    从图中大家可以看到,在每个考试部分的分数下方,都有两排小字,这个就是在告诉你:

    你这次这部分的成绩是第多少个percentile

    Percentile的中文翻译叫做百分位数,是一个统计学术语,定义为:百科

    如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。换言之,第p百分位数是这样一个值,它使得至少有p%的数据项小于或等于这个值,且至少有(100-p)%的数据项大于或等于这个值。

    (注:斜体字部分引用自“科普中国”科学百科)

    下面我来根据上述定义,举例说明一下percentile这个概念。

    老师举个栗子:

    上面图片上的成绩单中,Verbal Reasoning部分的成绩是163分,这个分数是第93个百分位数。假设这次考试的考生一共有10000人,那么通过这个分数是第93个百分位点,我们可以知道至少有10000乘以93%的人的得分。

    也就是9300人的得分,小于或等于163分,至少有10000乘以7%的人的得分,也就是700人的得分,大于或等于163分。

    c3a63dee4b80d9836602ec86d1ed83cc.png

    下面我们来看一下GRE考试中对于percentile的一般考法,看这道题:

    数学1For a set of numbers, the value of the 66th percentile is 80, and the value of the 56th percentile is 60.

    Quantity A: the value of 46th percentile

    Quantity B: 40

    · Quantity A is greater.

    · Quantity B is greater.

    · The two quantities are equal.

    · The relationship cannot be determined from the information given.

    请根据上面percentile的定义,来比较数量A和B的大小关系,选完答案之后看下面的解析。

    答案解析:

    由percentile的定义可知,the value of the 66th percentile is 80的意思是在这组数据中,有66%的数是小于等于80的,有56%的数据是小于等于60的。比较大小的双方是第46个百分位数和40。

    根据定义,40这个数是小于60的,因此40肯定小于第56个百分位数的,容易知道第46个百分位数是小于等于第56个百分位数的。

    但是40和第46个百分位数的大小关系由已知条件是判断不了的,所以应选择选项The relationship cannot be determined from the information given。

    再看一道题:

    数学2

    For the numbers in set A, the median is 60, r is a number between the 40th percentile and 45th percentile。For the numbers in set B, the median is 60, t is a number between the 55th percentile and 60th percentile.

    Quantity A: r

    Quantity B: t

    · Quantity A is greater.

    · Quantity B is greater.

    · The two quantities are equal.

    · The relationship cannot be determined from the information given.

    请根据上面percentile的定义,来比较数量A和B的大小关系。

    答案解析:

    由percentile的定义可知,60是set A里面的数的第50个百分位点,r是在第40个百分位点到第45个百分位点之间,所以r应该是小于等于60的。

    同样地,60是set B里面的数的第50个百分位点,t是在第55个百分位点到第60个百分位点之间,所以t应该是大于等于60的。

    综合来看,就是r小于等于60小于等于t。因此,r小于等于t,所以他们的大小关系同样不确定。因此应选择选项The relationship cannot be determined from the information given。


    孝林老师:真经GRE数学和写作老师,原新东方、考满分GRE讲师,北京航空航天大学管理学学士&硕士,8年GRE教学培训经验,曾在美国ETS总部与GRE考官培训师面对面沟通GRE出题思路。对GRE写作有非常深刻理解,积累掌握了丰富新颖的论据,独创4步法来快速形成GRE文章思路,学员实测效果非常好,讲解深入浅出,易于理解习得,提分效果显著。对GRE数学考点了如指掌,培训出大量GRE数学满分学员。

    真经GRE:科普文:GRE算分规则(估算版)zhuanlan.zhihu.com
    真经GRE:我是如何横扫哈佛宾大等顶级名校的?zhuanlan.zhihu.com
    b7fb10bc633f0a7b3964048e36ad71ef.png

    关注真经GRE,定期更新备考干货以及最新GRE福利,带你轻松杀G!

    展开全文
  • 1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 参考程序: main() { int ...

    写在前面:

    废话不多说,一百题还是看起来有点多,所以把它分为4pain文章来说对大家都好,不会视觉疲劳。

    【程序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&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/
        printf("%d,%d,%d\n",i,j,k);
       }
    }

    【程序2】

    企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

    1.参考程序 :

    main()
    {
    long int i;
    int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
    scanf("%ld",&i);
    bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
    bonus4=bonus2+200000*0.5;
    bonus6=bonus4+200000*0.3;
    bonus10=bonus6+400000*0.15;
     if(i<=100000)
      bonus=i*0.1;
     else if(i<=200000)
         bonus=bonus1+(i-100000)*0.075;
        else if(i<=400000)
            bonus=bonus2+(i-200000)*0.05;
           else if(i<=600000)
               bonus=bonus4+(i-400000)*0.03;
              else if(i<=1000000)
                  bonus=bonus6+(i-600000)*0.015;
                 else
                  bonus=bonus10+(i-1000000)*0.01;
    printf("bonus=%d",bonus);
    }

    【程序3】

    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:

     2.参考程序

    #include "math.h"
    main()
    {
    long int i,x,y,z;
    for (i=1;i<100000;i++)
     { x=sqrt(i+100);   /*x为加上100后开方后的结果*/
      y=sqrt(i+268);   /*y为再加上168后开方后的结果*/
       if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
        printf("\n%ld\n",i);
     }
    }

    【程序4】

    输入某年某月某日,判断这一天是这一年的第几天?

    1. 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
    2. 参考程序
    main()
    {
    int day,month,year,sum,leap;
    printf("\nplease input year,month,day\n");
    scanf("%d,%d,%d",&year,&month,&day);
    switch(month)/*先计算某月以前月份的总天数*/
    {
     case 1:sum=0;break;
     case 2:sum=31;break;
     case 3:sum=59;break;
     case 4:sum=90;break;
     case 5:sum=120;break;
     case 6:sum=151;break;
     case 7:sum=181;break;
     case 8:sum=212;break;
     case 9:sum=243;break;
    }

    【程序5】

    输入三个整数x,y,z,请把这三个数由小到大输出。

    1. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
    2. 参考程序:
    main()
    {
    int x,y,z,t;
    scanf("%d%d%d",&x,&y,&z);
    if (x>y)
    {t=x;x=y;y=t;} /*交换x,y的值*/
    if(x>z)
    {t=z;z=x;x=t;}/*交换x,z的值*/
    if(y>z)
    {t=y;y=z;z=t;}/*交换z,y的值*/
    printf("small to big: %d %d %d\n",x,y,z);
    }

    【程序6】

    用*号输出字母C的图案。

    1. 程序分析:可先用'*'号在纸上写出字母C,再分行输出。
    2. 参考程序 :
    #include "stdio.h"
    main()
    {
    printf("Hello C-world!\n");
    printf(" ****\n");
    printf(" *\n");
    printf(" * \n");
    printf(" ****\n");
    }

    【程序7】

    输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

    1. 程序分析:字符共有256个。不同字符,图形不一样。
    2. 参考程序:      
    #include "stdio.h"
    main()
    {
    char a=176,b=219;
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",a,a,b,a,a);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",b,a,a,a,b);}

    【程序8】

    输出9*9口诀。

    1. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
    2. 参考程序:
    #include "stdio.h"
    main()
    {
     int i,j,result;
     printf("\n");
     for (i=1;i<10;i++)
      { for(j=1;j<10;j++)
        {
        result=i*j;
        printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
        }
       printf("\n");/*每一行后换行*/
      }
    }

    【程序9】

    要求输出国际象棋棋盘。

    1. 程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
    2. 参考程序:
    #include "stdio.h"
    main()
    {
    int i,j;
    for(i=0;i<8;i++)
     {
      for(j=0;j<8;j++)
       if((i+j)%2==0)
        printf("%c%c",219,219);
       else
        printf(" ");
       printf("\n");
     }
    }

    【程序10】

    打印楼梯,同时在楼梯上方打印两个笑脸。 

    1. 程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
    2. 参考程序:
    #include "stdio.h"
    main()
    {
    int i,j;
    printf("\1\1\n");/*输出两个笑脸*/
    for(i=1;i<11;i++)
     {
     for(j=1;j<=i;j++)
       printf("%c%c",219,219);
     printf("\n");
     }
    } 

    【程序11】

    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    1. 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
    2. 参考程序
    main()
    {
    long f1,f2;
    int i;
    f1=f2=1;
    for(i=1;i<=20;i++)
     { printf("%12ld %12ld",f1,f2);
       if(i%2==0) printf("\n");/*控制输出,每行四个*/
       f1=f1+f2; /*前两个月加起来赋值给第三个月*/
       f2=f1+f2; /*前两个月加起来赋值给第三个月*/
     }
    }

    【程序12】

    判断101-200之间有多少个素数,并输出所有素数。

    1. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
    2. 参考程序      
    #include "math.h"
    main()
    {
     int m,i,k,h=0,leap=1;
     printf("\n");
     for(m=101;m<=200;m++)
      { k=sqrt(m+1);
       for(i=2;i<=k;i++)
         if(m%i==0)
          {leap=0;break;}
       if(leap) {printf("%-4d",m);h++;
           if(h%10==0)
            printf("\n");
            }
       leap=1;
      }
     printf("\nThe total is %d",h);
    }

    【程序13】

    打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

    1. 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
    2. 参考程序
    main()
    {
    int i,j,k,n;
    printf("'water flower'number is:");
     for(n=100;n<1000;n++)
     {
      i=n/100;/*分解出百位*/
      j=n/10%10;/*分解出十位*/
      k=n%10;/*分解出个位*/
      if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
       {
       printf("%-5d",n);
       }
     }
    printf("\n");
    }

    【程序14】

    将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    1、程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 

    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

    (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。

    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    2、参考程序

    main()
    {
    int n,i;
    printf("\nplease input a number:\n");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)
     {
      while(n!=i)
      {
       if(n%i==0)
       { printf("%d*",i);
        n=n/i;
       }
       else
        break;
      }
    }
    printf("%d",n);
    }

    【程序15】

    利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, 60分以下的用C表示。

    1. 程序分析:(a>b)?a:b这是条件运算符的基本例子。
    2. 参考程序
     main()
    {
     int score;
     char grade;
     printf("please input a score\n");
     scanf("%d",&score);
     grade=score>=90?'A':(score>=60?'B':'C');
     printf("%d belongs to %c",score,grade);
    }

    【程序16】

    输入两个正整数m和n,求其最大公约数和最小公倍数。

    1.参考程序

    #include "stdio.h"
    main()
    {char c;
     int letters=0,space=0,digit=0,others=0;
     printf("please input some characters\n");
     while((c=getchar())!='\n')
     {
     if(c>='a'&&c<='z'||c>='A'&&c<='Z')
      letters++;
     else if(c==' ')
      space++;
       else if(c>='0'&&c<='9')
           digit++;
         else
           others++;
    }
    printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
    space,digit,others);
    }

    【程序17】

    输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    1. 程序分析:利用while语句,条件为输入的字符不为'\n'.
    2. 参考程序
    #include "stdio.h"
    main()
    {char c;
     int letters=0,space=0,digit=0,others=0;
     printf("please input some characters\n");
     while((c=getchar())!='\n')
     {
     if(c>='a'&&c<='z'||c>='A'&&c<='Z')
      letters++;
     else if(c==' ')
      space++;
       else if(c>='0'&&c<='9')
           digit++;
         else
           others++;
    }
    printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
    space,digit,others);
    }

    【程序18】

    求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

    1. 程序分析:关键是计算出每一项的值。
    2. 参考程序
     main()
    {
     int a,n,count=1;
     long int sn=0,tn=0;
     printf("please input a and n\n");
     scanf("%d,%d",&a,&n);
     printf("a=%d,n=%d\n",a,n);
     while(count<=n)
     {
      tn=tn+a;
      sn=sn+tn;
      a=a*10;
      ++count;
     }
    printf("a+aa+...=%ld\n",sn);
    }

    【程序19】

    一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

    1. 程序分析:请参照程序14.
    2. 参考程序
    #include"stdio.h"
    main()
    {
    int j,i,k=0;
    for(j=6;j<1001;j++)
    {
    for(i=1;i<=j/2;i++)if(j%i==0)k+=i;
    if(j==k)
      {
      printf("%4d its factors are ",k);
      for(i=1;i<=j/2;i++)
      if(j%i==0)printf("%d,",i);
      printf("\b \n");
      }
    k=0;
    }
    getch()();
    }
    
    

    【程序20】

    一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    1.参考程序

    main()
    {
    float sn=100.0,hn=sn/2;
    int n;
    for(n=2;n<=10;n++)
     {
      sn=sn+2*hn;/*第n次落地时共经过的米数*/
      hn=hn/2; /*第n次反跳高度*/
     }
    printf("the total of road is %f\n",sn);
    printf("the tenth is %f meter\n",hn);
    }
    
    

     

    展开全文
  • 实例1:题目:1、2、3、4个数字,能组成多少个相互不同且无重复的三位?都是多少?#!/usr/bin/env python#--*--coding:utf-8 --*--'''可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不...

    如果你已经把基础看完,可以尝试一下看看以下例子了,如果不会做也不要紧,你要尝试手动把所有的代码都敲一边。别嫌麻烦,因为都是从麻烦到简单的。

    实例1:

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

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。'''

    for i in range(1,5):

    for j in range(1,5):

    for k in range(1,5):

    if (i != j) and (i != k) and (k != j):

    print i, j, k实例1

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1 2 3

    1 2 4

    1 3 2

    1 3 4

    1 4 2

    1 4 3

    2 1 3

    2 1 4

    2 3 1

    2 3 4

    2 4 1

    2 4 3

    3 1 2

    3 1 4

    3 2 1

    3 2 4

    3 4 1

    3 4 2

    4 1 2

    4 1 3

    4 2 1

    4 2 3

    4 3 1

    4 3 2View Code

    实例2:

    题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提成10%; 利润高于10万,低于20万时,低于10万的部分按10%提成,高于10万部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:

    0-10万提成10%

    10-20万提成7.5%

    20-40万提成5%

    40-60万提成3%

    60-100万提成1.5%

    100万以上1%

    思路:

    请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。'''

    '''注:如果列表的顺序相反,计算结果不一样'''

    i = int(raw_input('input:'))

    m = [1000000,600000,400000,200000,100000,0]

    t = [0.01,0.015,0.03,0.05,0.075,0.1]

    r = 0

    for s in range(0,6):#循环列表元素数 if i>m[s]:#判断输入的元素 r+=(i-m[s])*t[s]

    print (i-m[s])*t[s]

    i=m[s]

    print rView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    输入您的利润:300000

    5000.0

    7500.0

    10000.0

    22500.0View Code

    实例3:

    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该书是多少?

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:判断一个数加100是一个数的完全平方数,加168是另一个数的完全平方数。

    思路:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:'''

    import math

    for i in range(10000):

    x = int(math.sqrt(i + 100))

    y = int(math.sqrt(i + 168))

    if (x * x == i + 100) and (y * y == i + 168):

    print iView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    156View Code

    实例4:

    题目:输入某年某年某月某日,判断这一天是这一年的第几天?

    ContractedBlock.gif

    ExpandedBlockStart.gif

    !/usr/bin/env python

    #--*--coding:utf-8 --*--'''需求:判断输入的日期是本年的第几天

    思路:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊       情况,闰年且输入月份大于3时需考虑多加一天:'''

    year = int(raw_input('year: '))

    month = int(raw_input('month: '))

    day = int(raw_input('day: '))

    months = [0,31,59,90,120,151,181,212,243,273,304,334]

    if 0 <= month <= 12:#判断输入的月份 sum = months[month - 1]

    else:

    print 'data error'

    sum += day

    leap = 0

    if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):#判断是平年还是润年 leap = 1

    if (leap == 1) and (month > 2):

    sum += 1

    print 'it is the %dth day.' % sumView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    year:

    2015

    month:

    12

    day:

    13

    it is the 347th day.View Code

    实例5:

    题目:输入三个整数x,y,z,请把这三个数由小到大输出。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:输入三个整数,有小到大进行排序

    思路:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。'''

    m = []

    for i in range(0,3):

    n = int(raw_input('input:'))

    m.append(n)

    m.sort()#从小到大排序#m.sort(reverse = True)#从大到小排序print mView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    input:3

    input:7

    input:1

    [1, 3, 7]View Code

    实例6:

    题目:斐波那契数列。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:斐波那契数列:0、1、1、2、3、5、8、13、21、34、……。输出第100个斐波数

    思路:根据数列规律可以得出下一个数值都是前两个数值的和'''

    '''方法一:'''

    def fib(n):

    a,b = 1,1

    for i in range(n-1):

    a,b = b,a+b

    return a#返回第100个斐波那契数列print fib(100)

    '''方法二:'''

    def fib(n):

    if n == 1 or n == 2:

    return 1

    return fib(n-1)+fib(n-2)

    print fib(100)#如果输出的结果太大的话会消耗cpu建议小点'''方法三:'''

    def fib(n):

    if n == 1:

    return [1]

    if n == 2:

    return [1, 1]

    fibs = [1, 1]

    for i in range(2, n):

    fibs.append(fibs[-1] + fibs[-2])

    return fibs

    #输出前 10 个斐波那契数列print fib(100)View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    354224848179261915075View Code

    实例7:

    题目:将一个列表的数据复制到另一个列表中。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''将一个列表的数据复制到另一个列表里'''

    a = [1,2,3,4,5,6,7,8,9,0]

    b = a[:]

    print bView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]View Code

    实例8:

    题目:输出9*9乘法口诀表。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:99乘法口诀表

    思路:分行与列考虑,共9行9列,i控制行,j控制列。'''

    for i in range(1,10):

    for j in range(1,10):

    result = i * j

    print '%d * %d = % - 3d'% (i,j,result)#循环的两个数相乘 print ''#两个循环的间隔View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1 * 1 = 1

    1 * 2 = 2

    1 * 3 = 3

    1 * 4 = 4

    1 * 5 = 5

    1 * 6 = 6

    1 * 7 = 7

    1 * 8 = 8

    1 * 9 = 9

    2 * 1 = 2

    2 * 2 = 4

    2 * 3 = 6

    2 * 4 = 8

    2 * 5 = 10

    2 * 6 = 12

    2 * 7 = 14

    2 * 8 = 16

    2 * 9 = 18

    3 * 1 = 3

    3 * 2 = 6

    3 * 3 = 9

    3 * 4 = 12

    3 * 5 = 15

    3 * 6 = 18

    3 * 7 = 21

    3 * 8 = 24

    3 * 9 = 27

    4 * 1 = 4

    4 * 2 = 8

    4 * 3 = 12

    4 * 4 = 16

    4 * 5 = 20

    4 * 6 = 24

    4 * 7 = 28

    4 * 8 = 32

    4 * 9 = 36

    5 * 1 = 5

    5 * 2 = 10

    5 * 3 = 15

    5 * 4 = 20

    5 * 5 = 25

    5 * 6 = 30

    5 * 7 = 35

    5 * 8 = 40

    5 * 9 = 45

    6 * 1 = 6

    6 * 2 = 12

    6 * 3 = 18

    6 * 4 = 24

    6 * 5 = 30

    6 * 6 = 36

    6 * 7 = 42

    6 * 8 = 48

    6 * 9 = 54

    7 * 1 = 7

    7 * 2 = 14

    7 * 3 = 21

    7 * 4 = 28

    7 * 5 = 35

    7 * 6 = 42

    7 * 7 = 49

    7 * 8 = 56

    7 * 9 = 63

    8 * 1 = 8

    8 * 2 = 16

    8 * 3 = 24

    8 * 4 = 32

    8 * 5 = 40

    8 * 6 = 48

    8 * 7 = 56

    8 * 8 = 64

    8 * 9 = 72

    9 * 1 = 9

    9 * 2 = 18

    9 * 3 = 27

    9 * 4 = 36

    9 * 5 = 45

    9 * 6 = 54

    9 * 7 = 63

    9 * 8 = 72

    9 * 9 = 81View Code

    实例9:

    题目:暂停一秒输出。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''暂停以秒输入'''

    import time

    myD = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e', 6:'f', 7:'g'}

    for key,value in dict.items(myD):

    print key,value

    time.sleep(1)#暂停一秒View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1 a

    2 b

    3 c

    4 d

    5 e

    6 f

    7 gView Code

    实例10:

    题目:暂停一秒输入。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''暂停一秒输出'''

    import time

    print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

    time.sleep(1)

    print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    2016-01-10 23:43:17

    2016-01-10 23:43:18View Code

    实例11:

    题目:古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:一对兔子,从出生后第三个月起每个月都会生出一对兔子,小兔子长到三个月又生一对小兔子。假如兔子不死,问每个月兔子总数。

    思路:兔子的规律为数列1,1,2,3,5,8,13,21....'''

    f1 = 1

    f2 =2

    for i in range(1,21):

    print '%12d %12d' % (f1,f2)

    if (i % 2) == 0:

    print ''

    f1 = f1 + f2

    f2 = f1 + f2View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1 2

    3 5

    8 13

    21 34

    55 89

    144 233

    377 610

    987 1597

    2584 4181

    6765 10946

    17711 28657

    46368 75025

    121393 196418

    317811 514229

    832040 1346269

    2178309 3524578

    5702887 9227465

    14930352 24157817

    39088169 63245986

    102334155 165580141View Code

    实例12:

    题目:判断101-200之间有多少个素数,并输出所有素数。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:判断101-200之间的所有素数,并输出

    思路:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。'''

    h = 0

    leap = 1

    from math import sqrt

    from sys import stdout

    for m in range(0,201):

    k = int(sqrt(m + 1))

    for i in range(2,k + 1):

    if m % i == 0:

    leap = 0

    break

    if leap == 1:

    print '%-4d' % m

    h += 1

    if h % 10 == 0:

    print ''

    leap = 1

    print 'The total is %d' % hView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    0

    1

    2

    3

    5

    7

    11

    13

    17

    19

    23

    29

    31

    37

    41

    43

    47

    53

    59

    61

    67

    71

    73

    79

    83

    89

    97

    101

    103

    107

    109

    113

    127

    131

    137

    139

    149

    151

    157

    163

    167

    173

    179

    181

    191

    193

    197

    199

    The total is 48View Code

    实例13:

    题目:打印出所有的"水印花数”,所谓"水印花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水印花数”,因为153=1的三次方+5的三次方+3的三次方。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:打印所有"水印数”,例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方

    思路:利用for循环控制100-999个数,每个数分解出个位,十位,百位。'''

    for n in range(100,1000):

    i = n / 100 #百位数 j = n / 10 % 10 #十位数 k = n % 10 #个位数 if n == i ** 3 + j ** 3 + k ** 3:

    print nView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    153

    370

    371

    407View Code

    实例14:

    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5.

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    思路:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

    (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。'''

    from sys import stdout

    n = int(raw_input("input number:"))

    print "n = %d" % n

    for i in range(2,n + 1):

    while n != i:

    if n % i == 0:

    stdout.write(str(i))

    stdout.write("*")

    n = n / i

    else:

    break

    print "%d" % nView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    input number:100

    n = 100

    2*2*5*5View Code

    实例15:

    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-80分之间的用B表示,60分以下的用C表示。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:利用条件运算符的嵌套来完成成绩表。

    思路:(a>b)?a:b这是条件运算符的基本例子。'''

    score = int(raw_input('input score:'))

    if score >= 90:

    grade = 'A'

    elif score >= 80:

    grade = 'D'

    elif score >= 70:

    grade = 'C'

    elif score >= 60:

    grade = 'D'

    else:

    grade = 'E'

    print '%d belongs to %s' % (score,grade)View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    input score:26

    26 belongs to EView Code

    实例16:

    题目:输出指定格式的日期。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''输入指定格式的日期'''

    import datetime

    if __name__ == '__main__':#输出今日日期,格式为dd/mm/yyyy.更改选项可以查看strftime()方法。 print(datetime.date.today().strftime('%d/%m/%Y'))

    #创建日期对象 miyazakiBirthDate = datetime.date(1941, 1, 5)

    print(miyazakiBirthDate.strftime('%d/%m/%Y'))

    #日期算术运算 miyazakiBirthDextDate = miyazakiBirthDate + datetime.timedelta(days=1)#加一天 print(miyazakiBirthDextDate.strftime('%d/%m/%Y'))

    #日期替换 miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)#加一年 print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    11/01/2016

    05/01/1941

    06/01/1941

    05/01/1942View Code

    实例17:

    题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:输入一行字符,分别统计出其中英文字母、空格,数字和其他字符的个数。

    思路:利用while语句,条件为输入的字符'''

    import string

    s = raw_input('input a string:')

    letters = 0

    space = 0

    digit = 0

    others = 0

    for c in s:

    if c.isalpha():

    letters += 1

    elif c.isspace():

    space += 1

    elif c.isdigit():

    digit += 1

    else:

    others += 1

    print('char = %d, space = %d,digit = %d,others = %d' % (letters,space,digit,others))View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    input a string:sffq265233!!0aff dd g

    char = 10, space = 3,digit = 7,others = 2View Code

    实例18:

    题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+222...2(此时共有5个数相加),几个数相加有键盘控制。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

    思路:先计算出每一项的值。'''

    Tn = 0

    Sn = []

    n = int(raw_input('n = :'))

    a = int(raw_input('a = :'))

    for count in range(n):#先循环计算每一项的值 Tn = Tn + a

    a = a * 10

    Sn.append(Tn)

    print Tn

    Sn = reduce(lambda x,y : x + y,Sn)#在计算和print SnView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    n = :9

    a = :6

    6

    66

    666

    6666

    66666

    666666

    6666666

    66666666

    666666666

    740740734View Code

    实例19:

    题目:一个数如果恰好等于它的因子之和,这个数就称为"壳数”。例如6=1+2+3,编程找出1000以内的所有完数。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:找出1000以内的完数,完数就是一个数如果恰好等于它的因子之和,例如:6=1+2+3

    思路:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    (1)如果这个质数各个位之和恰等于n,则说明分解质因数的过程已经结束,打印出即可。'''

    from sys import stdout

    for j in range(2,1001):

    k = []

    n = -1

    s = j

    for i in range(1,j):

    if j % i == 0:

    n += 1

    s -= i

    k.append(i)

    if s == 0:

    print j

    for i in range(n):

    stdout.write(str(k[i]))

    print k[n]View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    6

    123

    28

    124714

    496

    1248163162124248View Code

    实例20:

    题目:一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?'''

    Sn = 100.0

    Hn = Sn / 2

    for n in range(2,11):

    Sn += 2 * Hn

    Hn /= 2

    print 'Total of road is %f' % Sn

    print 'The tenth is %f meter' % HnView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    Total of road is 299.609375

    The tenth is 0.097656 meterView Code

    实例21:

    题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前天剩下的一半零一个。到第十天早上再想吃时,见剩下一个桃子了。求一天共摘了多少。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

    思路:采用逆向思维的方法,从后在往前推断'''

    x2 = 1

    for day in range(9,0,-1):

    x1 = (x2 + 1) * 2

    x2 = x1

    print x1View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1534View Code

    实例22:

    题目:打印出如下图案(菱形) :

    *

    ***

    ******

    ***

    *

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:打印出如下图案(菱形):

    *

    ********************

    ***

    *

    思路:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。'''

    from sys import stdout

    for i in range(4):

    for j in range(2 - i + 1):

    stdout.write('')

    for k in range(2 * i + 1):

    stdout.write('*')

    print

    for i in range(3):

    for j in range(i + 1):

    stdout.write('')

    for k in range(4 - 2 * i + 1):

    stdout.write('*')

    printView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    *

    ***

    *****

    *******

    *****

    ***

    *View Code

    实例23:

    题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

    思路:根据分子和分母的变化可以发现一些规律。(第三个数的分子和分母,是前两个分子和分母之和)'''

    '''方法一:'''

    a = 2.0

    b = 1.0

    s = 0

    for n in range(1,21):

    s += a / b

    t = a

    a = a + b

    b = t

    print s

    '''方法二:'''

    a = 2.0

    b = 1.0

    s = 0.0

    for n in range(1,21):

    s += a / b

    b,a = a , a + b

    print s

    s = 0.0

    for n in range(1,21):

    s += a / b

    b,a = a , a + b

    print s

    '''方法三:'''

    a = 2.0

    b = 1.0

    l = []

    for n in range(1,21):

    b,a = a,a + b

    l.append(a / b)

    print reduce(lambda x,y: x + y,l)View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    32.6602607986

    32.6602607986

    32.360679776

    32.2782947888View Code

    实例24:

    题目:两个兵乓球队进行比赛,各出三人。甲队为a,b,c三人,乙对为x,y,z三人。以抽签决定比赛名单。有向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程找到三队赛手的名单。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

    思路:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。'''

    for i in range(ord('x'),ord('z') + 1):

    for j in range(ord('x'),ord('z') + 1):

    if i != j:

    for k in range(ord('x'),ord('z') + 1):

    if (i != k) and (j != k):

    if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):

    print 'order is a -- %s b -- %s c -- %s' % (chr(i),chr(j),chr(k))View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    order is a -- z b -- x c -- yView Code

    实例25:

    题目:求1+2!+3!+...+20!的和。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:求1+2!+3!+...+20!的和。

    思路:此程序只是把累加变成了累乘。'''

    '''方法一:'''

    n = 0

    s = 0

    t = 1

    for n in range(1,21):

    t *= n

    s += t

    print '1! + 2! + 3! + ... + 20! = %d' % s

    ''''

    方法二:'''

    s = 0

    l = range(1,21)

    def op(x):

    r = 1

    for i in range(1,x + 1):

    r *= i

    return r

    s = sum(map(op,l))

    print '1! + 2! + 3! + ... + 20! = %d' % sView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1! + 2! + 3! + ... + 20! = 2561327494111820313

    1! + 2! + 3! + ... + 20! = 2561327494111820313View Code

    实例26:

    题目:利用递归方法求5!。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:利用递归方法求5!。

    思路:递归公式:fn = fn_1*4!'''

    def fact(j):

    sum = 0

    if j == 0:

    sum = 1

    else:

    sum = j * fact(j - 1)

    return sum

    for i in range(5):

    print '%d! = %d' % (i,fact(i))View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    0! = 1

    1! = 1

    2! = 2

    3! = 6

    4! = 24View Code

    实例27:

    题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。'''

    def output(s,l):

    if l == 0:

    return

    print (s[l-1])

    output(s,l-1)

    s = raw_input('Input a string:')

    l = len(s)

    output(s,l)View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    Input a string:123544

    4

    4

    5

    3

    2

    1View Code

    实例28:

    题目:有5个人坐在一起,问第五个人多少岁?他说比第四个人大两岁。问第四个人岁数,他说比第三个人大两岁。问第三个人,又说比第二个人大两岁。问第二个人,说比第二个人大两岁。最后问第一个,他说是十岁。请问第五个人多大?

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    思路:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。'''

    def age(n):

    if n == 1:

    c = 10

    else:

    c = age(n-1) + 2

    return c

    print age(5)View Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    18View Code

    实例29:

    题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    思路:学会分解出每一位数。'''

    x = int(raw_input("input a number:"))

    a = x / 10000

    b = x % 10000 / 1000

    c = x % 1000 / 100

    d = x % 100 / 10

    e = x % 10

    if a != 0:

    print "there are 5",e,d,c,b,a

    elif b != 0:

    print "there are 4",d,c,b,a

    elif c != 0:

    print "there are 3",e,d,c

    elif d != 0:

    print "there are 2",e,d

    else:

    print "there are 1",eView Code

    输出结果:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    input a number:56819

    there are 5 9 1 8 6 5View Code

    实例30:

    题目:一个五位数,判断他是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    ContractedBlock.gif

    ExpandedBlockStart.gif

    #!/usr/bin/env python#--*--coding:utf-8 --*--'''需求:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。'''

    #x = int(raw_input('input a number:'))#x = str(x)#for i in range(len(x)/2):#if x[i] != x[

    展开全文
  • C语言经典程序一百

    2009-02-18 08:57:32
    题目:1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去  掉不满足条件的排列。 2.程序源代码: main...
  • 主要思路:设定整数点(如1、10、100等等)作为位置点i(对应n的各位、十位、百位等等),分别对每个数位上有多少包含1的点进行分析根据设定的整数位置,对n进行分割,分为两部分,高位n/i,低位n%i当i表示...
  • java每日

    2017-08-16 21:18:30
    题目:1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位?都是多少?public class Threenum { public static void main(String[] args) { int count = 0; //三层for循环,分别循环十个位14 ...
  • 思路:简单的二分答案,我们可以将刚开始的数字都乘一百来做一整数运算,然后check函数里面用一ans加上每绳子最多可以分成多少根,最后返回分的数量是否大于等于,如果是的话就说明mid开小了,导致超了或者...
  • 海量数据找中位

    千次阅读 2012-10-28 20:32:40
    有几百亿的整数,分布的存储台通过网络连接的...将0-2^32划分为若干桶,每电脑放一个桶,每桶内有计数器,记录有多少数放在桶内 一个桶的计数器开始加,一直加大于n/2 所以中位肯定在这桶内
  • 然后要我们求的是这些公路的交叉点有多少个开始我看就1000个城市嘛,暴力应该ok啊,然后写了一发暴力,果断T了。然后想想1000*1000,T啊。 于是开始想着用其他的方法。才发现原来这道题本质上就是求...
  • 炼----踩方格

    2021-01-23 19:49:02
    每走一步时,只能当前方格移动格,走某个相邻的方格上; b. 走过的格子立即塌陷无法再走第二次; c. 只能向北、东、西三方向走; 请问:如果允许在方格矩阵上走 nn 步,共有多少种不同的方案。 22 种走法...
  • 因为日期分类之后的实现,是要通过(exp1|exp2|exp3)这种分支结构来实现的,而分支结构是左侧分支依次向右开始尝试匹配,当有一个分支匹配成功时,就不再向右尝试,否则尝试所有分支后并报告失败。 分支的多少,每...
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    第1章 声明和初始化 ...6.23 sizeof返回的大小是以字节计算的,怎样才能判断数组中有多少个元素呢? 第7章 内存分配 基本的内存分配问题 7.1 为什么这段代码不行?char*answer;printf("Typesomething...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不数组的大小? 13 声明问题 14 1.25 函数只定义了次,调用了次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 24 38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 25 39、下面的...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不数组的大小? 13 声明问题 14 1.25 函数只定义了次,调用了次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 有一个N*M的矩阵,每位置都有一个数,可以大的走向小的,问可走的路最长是多少 原题 Michael喜欢滑雪这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑坡底,...
  • 功能: 将多具有相同格式的工作簿中所有工作表合并为一工作簿的多工作表中,也可以将一工作簿的所有工作表合并到一个工作表 特点: 1.多工作簿合并时,可以自由指定待合并工作簿的目录路径。 2.可以选择将多...
  • 功能: 将多具有相同格式的工作簿中所有工作表合并为一工作簿的多工作表中,也可以将一工作簿的所有工作表合并到一个工作表 特点: 1.多工作簿合并时,可以自由指定待合并工作簿的目录路径。 2.可以选择将多...
  • 【基础】小白的亲戚

    2013-09-16 08:41:00
    小白冬令营回来,想编一个程序统计自己到底有多少亲戚。 输入 第行:3整数n,k,h。n表示有1~n个人,k关系,统计编号为h的人有多少亲戚。n,k,h均小于等于1000。 输出 一个整数,亲戚。 ...
  • 5.6给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 12 5.7给定一不多于5位的正整数,要求:①...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
关键字:

从一数到一百有多少个一