Python 练习实例23 Python 100例
题目:打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
程序代码:
for i in range(1,8):
if(i<5):
for j in range(1,8):
if((i+j)>=5)and(j<i+4):
print '*',
else:
print ' ',
print ''
else:
for j in range(1,8):
if((i-j)<=3)and(j<=11-i):
print '*',
else:
print ' ',
print ''
Python 练习实例24 Python 100例
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。
程序代码:
a=2.0
b=1.0
sum=0
for i in range(0,20):
sum=sum+a/b
k=a
a=a+b
b=k
print sum
题目57 6174问题 (南阳oj)
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234
样例输出
4
程序代码:
#include<stdio.h>
int main()
{
int k,a,b,n,i,j,sum,s[4]={0};
scanf("%d",&j);
while (j--)
{
sum=1;
scanf("%d",&k);
while(k!=6174)
{
s[0]=k/1000;
s[1]=k/100%10;
s[2]=k%100/10;
s[3]=k%10;
for(i=0;i<4;i++)
{
if(s[i]<s[0])
{
n=s[0];
s[0]=s[i];
s[i]=n;
}
if(s[i]>s[3])
{
n=s[3];
s[3]=s[i];
s[i]=n;
}
if(s[1]>s[2])
{
n=s[1];
s[1]=s[2];
s[2]=n;
}
}
a=s[0]*1000+s[1]*100+s[2]*10+s[3];
b=s[0]+s[1]*10+s[2]*100+s[3]*1000;
k=b-a;
sum=sum+1;
}
printf("%d\n",sum);
}
}