/* 1、打印出所有的"水仙花数"。所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153 = 13 + 53 + 33。 */
#include<iostream.h>
void main()
{
    int i, a=0, b=0, c=0;
    for(i=100;i<1000;i++)
    {
        a=i%10;
        b=i/10%10;
        c=i/100%10;
        if(a*a*a+b*b*b+c*c*c==i)
            cout<<"i="<<i<<endl;
    }
}
/* 2、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6 = 1 + 2 + 3,因此6是"完数"。编程序出1000之内的所有完数,并按下面的格式输出其因子:
6 -〉1,2,3 */
#include<iostream.h>
void main()
{
    int i,j,sum=0,a[50],k,t;
    for(i=1;i<=1000;i++)
    {
        sum=0;
        for(j=1;j<i;j++)
        {
            if(i%j==0)
            {
                sum+=j;
                a[k++]=j;
            }
        }
        t=k;
        if(sum==i)
        {
            cout<<i<<"->";
            for(k=0;k<t;k++)
            {
                cout<<a[k];
                if(k<t-1)cout<<",";
            }
            cout<<endl;
        }
        k=0;
    }
}
/* 3、求Sn=a+aa+aaa+...+aa...a之值,其中a是一个数字。例如:2+22+222+...+22222(此时n=5),n由键盘输入。*/
#include<iostream.h>
void main()
{
    double a,sn=0.0,sum=0.0;
    int n,i;
    cout<<"please input a number";
    cin>>a;
    cout<<"please input n number";
    cin>>n;
    sn=a;
    sum=a;
    for(i=2;i<=n;i++)
    {
        sum=sum*10+a;
        sn+=sum;
    }
    cout<<"Sn="<<sn<<endl;
}
/* 4、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过了多少米?第10次反弹多高?*/
#include<iostream.h>
void main()
{
    double h1=100,h2=100,sum=0.0;
    int i;
    for(i=1;i<=10;i++)
    {
        sum+=h2;
        h1=h1/2.0;
        h2=h1*2;
    }
    cout<<"sum="<<sum<<"  "<<"h1="<<h1<<endl;
}
/* 5、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/
#include<iostream.h>
void main()
{
    int number,i;
    number=1;
    for(i=10;i>1;i--)
    number=(number+1)*2;
    cout<<"number="<<number<<endl;
}
第4章 函数
/* 1、写一函数用"气泡法"对输入的10个字符按由小到大的顺序排列。*/
#include<iostream.h>
void main()
{
    int i,j,temp,a[10];
    cout<<"please input ten numbers:\n";
    for(i=0;i<10;i++)
        cin>>a[i];
    for(i=0;i<10;i++) //每循环一次确定数组中一个数的位置
        for(j=i+1;j<10;j++) //每次循环对比一个数的大小
        {
            if(a[i]>a[j])
            {
                temp=a[j];
                a[j]=a[i];
                a[i]=temp;
            }
        }
        cout<<"resort result=";
        for(i=0;i<10;i++)
            cout<<a[i]<<" ";
}
/* 2、用递归方法求n阶勒让得多项式的值,递归公式为
        1 (n = 0)
Pn(x) =  x (n = 1)
        ((2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n (n > 1) */
#include<iostream.h>
double fun (double,double);
void main()
{
    double n,x,sum;
    cout<<"input n and x"<<endl;
    cin>>n>>x;
    sum=fun(n,x);
    cout<<"P"<<n<<"("<<x<<")"<<"="<<sum<<endl;
}
double fun(double n1,double x1)
{
    if (n1==0)
        return 1;
    else if (n1==1)
        return  x1;
    else if (n1>1)
        return ((2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2,x1))/n1;
}
/* 3、编写一函数,由实参传来一字符串统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。 */
#include<iostream.h>
void judge(char a[]);
void main()
{
    const int size=100;
    char a[size];
    line(a,size);
    judge(a);
}
void judge(char a[100])//判断字符类型
{
    int letter=0,number=0,others=0,i=0;
    while(a[i]!='\0')
    {
        if ((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='z')) letter++;//统计字母个数
        else if (a[i]>='0' && a[i]<='9') number++;//统计数字个数
        else others++;//统计其他数个数
        i++;
    }
    cout<<"letter="<<letter<<"  number="<<number<<"  others="<<others<<endl;
}
/* 4、给出年、月、日,计算该日是该年的第几天。 */
#include<iostream.h>
江西教育考试院int lead(int);
void main()
{
    int ly,year,month,date,i,sum=0;
    cout<<"input year、month、date: ";
    cin>>year>>month>>date;
    int a[12]={31,0,31,30,31,30,31,31,30,31,30,31};
    ly=lead(year);
    if (ly==1)
        a[1]=29;//366天
    else a[1]=28;//365天
    for(i=0;i<month-1;i++) //当前月之前所有月天数累加和
        sum+=a[i];
    sum+=date; //加上当前月天数
    cout<<"你输入的日期是当年的第"<<sum<<"天";
}
int lead(int y)//判断闰年
{
    if((y%4==0&&y%100!=0)||(y%400==0)) return 1;//是闰年
    else return 0;//不是闰年
}
/* 5、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 */
#include<iostream.h>
int cdivisor(int,int);