C语言大学生考试全面题库2

C/C++
406
0
0
2023-03-11

分割自然数游戏

题目描述: 周末强强在家做作业,遇到了这样一道题,找出N位(N<8)的自然数中具有下列性质的数:如果将这个数字从中间开始分割成两部分,然后将这两部分相加,所得到的和的平方,等于原来那个数的(奇数的时候,中间的那个数字靠前)。从键盘输入N,直接在屏幕上输出答案。找不到满足要求的数时候,输出"NO FOUND"。强强想了许久也没想出来,想请你来帮忙,那么你该如何来帮助他呢? 输入描述: 输入N 输出描述描述: 符合条件的N位整数 样式输入:

4

样式输出:

2025 3025 9801

源代码

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,j,x1,x2,sum=0,min,max,k;
    int a[10];
    scanf("%d",&n);
    min=pow(10,n-1);//划分整数段。
    max=pow(10,n);
    if(n!=1)
    {
        for(i=min;i<max;i++)
        {
            k=pow(10,n/2);//划分分割段。
            x1=i%k;//右边的数。
            x2=i/k;//左边的数。
            if((x1+x2)*(x1+x2)==i)
            {
                a[sum]=i;
                sum++;
            }
        }
        if(sum==0)
            printf("NO FOUND");
        else 
        {
            for(j=0;j<sum-1;j++)
                printf("%d\n",a[j]);
            printf("%d",a[sum-1]);
        }
    }
    else
        printf("NO FOUND");
    return 0;
}  

乐乐摘苹果

题目描述: 一天乐乐去果园玩,发现一棵苹果树上结出10个苹果。乐乐跑去摘苹果。乐乐找到一个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知10个苹果到地面的高度,以及乐乐把手伸直的时候能够达到的最大高度,请帮乐乐算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 输入描述: 输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。 第二行只包括一个100到120之间(包含100和120) 的整数(以厘米为单位),表示乐乐把手伸直的时候能够达到的最大高度。 输出描述描述: 输出包括一行,这一行只包含一个整数,表示乐乐能够摘到的果的数目。 样式输入:

100 200 150 140 129 134 167 198 200 111 110

样式输出:

5

源代码

#include <stdio.h>
int main()
{
    int a[10],i,sum=0,n;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    scanf("%d",&n);
    for(i=0;i<10;i++)
        if(a[i]<=n+30)
            sum++;
    printf("%d",sum);
    return 0;
}  

不高兴的津津

题目描述: 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。(津津一天上课的时间应分为两部分:在学校的时间和在复习班的时间,这两个时间相加就是津津一天上课的时间。如果这个时间大于八小时津津就会不高兴。) 输入描述: 输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间 输出描述: 输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。 样式输入:

5 3 6 2 7 2 5 3 5 4 0 4 0 6

样式输出:

3

源代码

#include<stdio.h>
int main()
{
    int a,b;
    int max,k,i;
    max=8;
    for(i=0;i<7;i++)
    {
        scanf("%d %d",&a,&b);
        if(a+b>max)
        {
            max=a+b;
            k=i+1;
        }
    }
    if(max==8)
        printf("0\n");
    else
        printf("%d\n",k);
    return 0;
}  

最低位(二进制的转换)

题目描述: 任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。再例如,A=88,则二进制位1011000,则最低位是1000,输出为8。 输入描述: 输入包含一个整数A(1<=A<=109) 输出描述: 对应输入的最低位 样式输入:

8

样式输出:

8

源代码

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i=0,j,z,a[8],b[8],s=0;
    scanf("%d",&n);
    while(n)
    {
        a[i]=n%2;
        n/=2;
        i++;
    }
    for(j=0;j<i;j++)
    {
        b[j]=a[j];
        if(a[j]==1)
            break;
    }
    for(z=0;z<=j;z++)
        if(b[z]!=0)
            s+=pow(2,z);
    printf("%d",s);
    return 0;
}  

Fibonacci数列

题目描述: Fibonacci数列{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …},可以如下定义: F0=0 F1=1 Fi=F(i-1)+F(i-2) 对于所有的i大于2 写个程序计算Fibonacci数 输入描述: 第一行为需要测试个数T,接着的T行,每一行包含一个数n(0<=n<=45 ),即你需要计算的F(n) 输出描述: 每输入一个数n,输出对应的F(n) 样式输入:

5 0 3 5 9 20

样式输出:

0 2 5 34 6765

源代码

#include<stdio.h>
int main()
{
    int n,i,k,a[46];
    scanf("%d",&n);
    a[0]=0;
    a[1]=1;
    for(i=2;i<=45;i++)
        a[i]=a[i-1]+a[i-2];
    for(i=0;i<n;i++)
    {
        scanf("%d",&k);
        printf("%d",a[k]);
        if(i<n-1)
            printf("\n");
    }
    return 0;
}  

蛇形矩阵

题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入:

5

样式输出:

1 3 6 10 15 2 5 9 14 4 8 13 7 12 11

源代码

#include<stdio.h>
int main()
{
    int n,a[20]={1},i,j;
    int N,k,z,s;
    scanf("%d",&N);
    n=N;
    for(i=0,z=1;i<N-1;i++)
    {
        s=i+2;
        for(j=1;j<n;j++)
        {
            a[j]=a[j-1]+s;
            s++;
        }
        for(k=0;k<n-1;k++)
            printf("%d ",a[k]);
        printf("%d\n",a[n-1]);
        a[0]+=z;
        z++;
        n--;
    }
    printf("%d",a[0]);
    return 0;
}   

猪的安家

题目描述: Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。 输入描述: 输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10),表示Andy建立猪圈的次数,接下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1 输出描述描述: 输出包含一个正整数,即为Andy家至少养猪的数目

样式输入:

3 3 1 5 1 7 2

源代码

#include<stdio.h>
int main()
{
    int n,ai,bi;
    int i,j,k,a[1000],s=1000;
    scanf("%d",&n);
    for(i=0;i<1000;i++)
        a[i]=i+1;
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&ai,&bi);
        k=0;
        for(j=0;j<s;j++)
            if(a[j]%ai==bi)
            {
                a[k]=a[j];
                k++;
            }
        s=k;
    }
    if(k!=0)
        printf("%d",a[0]);
    return 0;    
}   

最大乘积的整数的拆分

题目描述: 将一个整数N分解成各不相同的加数的和,使这些加数的乘积最大。N范围为[5,1000] 输入描述: 输入一个整数N(5<=N<=1000) 输出描述描述: 能够使得积最大的加数序列 样式输入:

7

样式输出:

3 4

源代码

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n%3==1)
    {
        n-=4;
        while(n)
        {
            printf("3 ");
            n-=3;
        }
        printf("4");
    }
    else if(n%3==2)
    {
        printf("2");
        n-=2;
        while(n)
        {
            printf(" 3");
            n-=3;
        }
    }
    else
    {
        printf("3");
        n-=3;
        while(n)
        {
            printf(" 3");
            n-=3;
        }
    }
    return 0;
}   

插队

题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。 例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为:1 2 3 6 7 9; 输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素个数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待插入的数据 输出描述描述: 新的排序好的数组元素 样式输入:

5 1 2 6 7 9 3

样式输出:

1 2 3 6 7 9

源代码

#include<stdio.h>
int main()
{
    int a[101],n,i,j;
    int s,temp;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&s);
    for(i=0;i<n;i++)
    {
        if(a[i]>s)
        {
            for(j=n;j>i;j--)
                a[j]=a[j-1];    
            a[i]=s;
            break;
        }
    }
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("%d",a[n]);
    return 0;
}  

2源代码

#include<stdio.h>
int main()
{
    int i,a[21],n,m,k=0,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(i=0;i<n;i++)
        if(a[i]>m)
        {
            k=1;
            for(j=n;j>i;j--)
                a[j]=a[j-1];
            a[i]=m;
            break;
        }
    if(k==0)
        a[n]=m;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("%d",a[n]);
    return 0;
}  

卫星定位

题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。 例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出-1; 输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据 输出描述描述: 待查找的元素位置 样式输入:

5 1 2 6 7 9 7

样式输出:

4

源代码

#include<stdio.h>
int main()
{
    int i,a[20],n,m,k=-1;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(i=0;i<n;i++)
        if(a[i]==m)
        {
            k=i+1;
            break;
        }
    printf("%d",k);
    return 0;
}  

警察抓贼

题目描述: 编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个 输入描述: 输入包含两部分,第一部分先输入n,接着输入n个原数据。第二部分为待删除的元素; 输出描述描述: 删除特定元素后的剩余元素 样式输入:

8 1 3 4 6 3 5 3 6 3

样式输出:

1 3 4 6 5 3 6

源代码

#include<stdio.h>
int main()
{
    int n,a[1000];
    int s,i,t=0,m,j=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&s);
    for(i=0;i<n;i++)
        if(a[i]==s)
            t++;
    if(t%2!=0)
        m=(t+1)/2;
    else
        m=t/2;
    for(i=0;i<n-1;i++)
    {
        if(a[i]!=s)
            printf("%d ",a[i]);
        else
        {
            j++;
            if(j!=m)
                printf("%d ",a[i]);
        }
    }
    if(a[n-1]!=s)
        printf("%d ",a[n-1]);
    else
    {
        j++;
        if(j!=m)
            printf("%d ",a[n-1]);
    }
    return 0;
}   

2源代码

#include<stdio.h>
int main()
{
    int n,a[1000];
    int s,i,t=0,m,j=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&s);
    for(i=0;i<n;i++)
        if(a[i]==s)
            t++;
    if(t%2!=0)
        m=(t+1)/2;
    else
        m=t/2;
    for(i=0;i<n;i++)
    {
        if(a[i]!=s)
            printf("%d ",a[i]);
        else
        {
            j++;
            if(j!=m)
                printf("%d ",a[i]);
        }
    }
    return 0;
}

是非黑白

题目描述: 编写函数实现两个等长字符串大小比较。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串,如果相等则返回0; 输入描述: 输入待比较的两个字符串 输出描述描述: 字符串比较结果 样式输入:

abcdefg abcdeff

样式输出:

abcdefg

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[81],b[81];
    int i,len1,len2,max,s1=0,s2=0;
    scanf("%s",a);
    scanf("%s",b);
    len1=strlen(a);
    len2=strlen(b);
    max=(len1>len2)?len1:len2;
    for(i=0;i<len2;i++)
    {
        if(a[i]<b[i])
        {
            s2++;
            break;
        }
        if(a[i]>b[i])
        {
            s1++;
            break;
        }
    }
    if(s1==1)
        puts(a);
    if(s2==1)
        puts(b);
    if(s1==0 && s2==0)
    {
        if(len1>len2)
            puts(a);
        else if(len1<len2)
            puts(b);
        else
            printf("0");
    }
    return 0;
}   

搭桥

题目描述: 编写函数将两个升序排列的字符串融合成一个字符串,融合后的字符串仍然是升序排列的。 输入描述: 输入两升序字符串 输出描述描述: 融合后的字符串 样式输入:

acefi bdfg

样式输出:

abcdeffgi
#include<stdio.h>
#include<string.h>
int main()
{
    char a[162],b[81];
    int i,j,len,temp;
    scanf("%s",a);
    scanf("%s",b);
    strcat(a,b);
    len=strlen(a);
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)
        {
            if(a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    puts(a);
    return 0;
}  

2源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[162],b[81];
    int i,j,len,temp;
    scanf("%s",a);
    scanf("%s",b);
    strcat(a,b);
    len=strlen(a);
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)
        {
            if(a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    puts(a);
    return 0;
}  

一清二楚

题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格) 输入描述: 一混合字符串,最大长度为200 各类字符出现频率 输出描述描述: 各类字符出现频率 样式输入:

abcdefg9999////

样式输出:

ch:7 num:4 other:4

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[200];
    int ch=0,num=0,other=0,len,i;
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(a[i]>='0' && a[i]<='9')
            num++;
        else if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z'))
            ch++;
        else 
            other++;
    }
    printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
    return 0;
}  

2源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[200];
    int ch=0,num=0,other=0,len,i;
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(a[i]>='0' && a[i]<='9')
            num++;
        else if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z'))
            ch++;
        else 
            other++;
    }
    printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
    return 0;
}  

克隆

题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中; 输入描述: 输入两字符串 输出描述描述: 输出第二个字符串,注意:输出不换行。 样式输入:

Abdfeg Bdfad

样式输出:

Abdfe

源代码

#include<stdio.h>
#include<string.h>
int main()
{
   1: char a[100],b[100];
    int len1,len2,i;
    scanf("%s %s",a,b);
    len1=strlen(a);
    len2=strlen(b);
    if(len1<len2)
    {
        for(i=0;i<len1;i++)
            b[i]=a[i];
        b[len1]='\0';
    }
    else
    {
        for(i=0;i<len2;i++)
            b[i]=a[i];
    }
    puts(b);
    return 0;

}   

2源代码

#include<stdio.h>
#include<string.h>
int main()
{
    int len1,len2,i;
    char a[100],b[100];
    gets(a);
    gets(b);
    len1=strlen(a);
    len2=strlen(b);
    if(len1<len2)
        for(i=0;i<len1;i++)
            printf("%c",a[i]);
    else
    {
        for(i=0;i<len2;i++)
            printf("%c",a[i]);
    }
    return 0;
}  

四则运算程序

题目描述: 编制一个完成两个数的四则运算程序(加、减、乘、除)。如:用户输入34+56则输出结果34.00+56.00=90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。 数字可能是整数,也可能是浮点数。 知识点:格式输出,格式输入,条件语句 输入描述: 包含5组测试数据,每一组占一行,每一行包含数字和字符,运算结果不超过double范围。 输出描述描述: 两个数的运算的结果,如果运算符不为加、减、乘、除,则输出Input Error! 每个数字保留两位小数精度。 样式输入:

1+1 1-1 1*1 1/1 1^1

样式输出:

1.00+1.00=2.00 1.00-1.00=0.00 1.00*1.00=1.00 1.00/1.00=1.00 Input Error!

源代码

#include<stdio.h>
int main()
{
    double a,b,s;
    char c;
    while(scanf("%lf%c%lf",&a,&c,&b)!=EOF)
    {
        if(c=='+')
        {
            s=a+b;
            printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
        }
        else if(c=='-')
        {
            s=a-b;
            printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
        }
        else if(c=='*')
        {
            s=a*b;
            printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
        }
        else if(c=='/')
        {
            s=a/b;
            printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
        }
        else
            printf("Input Error!\n");
        
    }
    return 0;

}  

落体球反弹

题目描述: 一球从某个高度(大于等于100米)自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?。(保证6位精度) 输入描述: 高度为大于等于100米的实数,范围在double内。 输出描述描述: 第10次落地时,经过多少米,第10次反弹高度。 样式输入:

100

样式输出:

299.609375 0.097656
#include<stdio.h>
int main()
{
   int i=0,k=10;
   double sn,h,sum,n;
   scanf("%lf",&n);
   sum=n;
   while(i<k)
   {
      sn=n/2.0;
      sum+=(2*sn);
      n=sn;
      i++;
   }
   printf("%.6lf\n%.6lf",sum-(2*sn),sn);
   return 0;
}  

电话薄管理

题目描述: 利用结构体类型数组输入五位用户的姓名和电话号码,按姓名的字典顺序排列后(姓名相同保持原位置),输出用户的姓名和电话号码。 已知结构体类型如下:

 struct user 
{  char  name[20]; 
   char  num[10]; 
};

输入描述:

输入姓名字符串和电话号码字符串。

输出描述描述:

输出按姓名排序后的姓名字符串和电话号码字符串。每行的最后一个字符后不能有空格.所有输出的最后一行不能有回车

样式输入:

aa 12345 dd 23456 cc 34567 bb 21456 ee 12456

样式输出:

aa 12345 bb 21456 cc 34567 dd 23456 ee 12456

源代码

#include<stdio.h>
#include<string.h>
struct user 
{  char  name[20]; 
   char  num[10]; 
};
int main()
{
    int n=5,i=0,j;
    char temp1[20],temp2[10];
    struct user user[5];
    while(n)
    {
        scanf("%s",user[i].name);
        scanf("%s",user[i].num);
        i++;
        n--;
    }
    for(i=0;i<4;i++)
        for(j=i+1;j<5;j++)
            if(strcmp(user[i].name,user[j].name)>0)
            {
                strcpy(temp1,user[i].name);
                strcpy(user[i].name,user[j].name);
                strcpy(user[j].name,temp1);
                strcpy(temp2,user[i].num);
                strcpy(user[i].num,user[j].num);
                strcpy(user[j].num,temp2);
            }
    for(i=0;i<4;i++)
        printf("%s\n%s\n",user[i].name,user[i].num);
    printf("%s\n%s",user[4].name,user[4].num);
    return 0;
}

校门外的树

题目描述: 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。 输入描述: 输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 输出描述描述: 输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。所有输出的最后一行不能有回车 样式输入:

500 3 150 300 100 200 470 471

样式输出:

298

源代码

#include<stdio.h>
int main()
{
    int L,M,sum,i,min,max;
    int a[10000];
    scanf("%d%d",&L,&M);
    sum=L+1;
    for(i=0;i<=L;i++)
        a[i]=1;
    while(M)
    {
        scanf("%d%d",&min,&max);
        for(i=min;i<=max;i++)
            a[i]=0;
        M--;
    }
    for(i=0;i<=L;i++)
        if(a[i]==0)
            sum--;
    printf("%d",sum);
    return 0;
        
}  

歌手比赛

题目描述: 青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 输入描述: 10个评委的分数,每个分数是一个浮点数.输入数据保证有一个最低分,一个最高分,且最高分,最低分不相同.其它是数据与最低、最高均不相同 输出描述描述: 输出歌手的得分,保留一位小数.所有输出的最后一行不能有回车 样式输入:

8.5 9 9.8 6.5 8.7 8.5 9.3 9.6 8.9 8.2

样式输出:

8.8

源代码

#include<stdio.h>
int main()
{
    double a[10],min,max,sum=0;
    int i;
    for(i=0;i<10;i++)
        scanf("%lf",&a[i]);
    max=a[0];
    min=a[0];
    for(i=1;i<10;i++)
    {
        if(max<a[i])
            max=a[i];
        if(min>a[i])
            min=a[i];
    }
    for(i=0;i<10;i++)
        sum+=a[i];
    sum-=max+min;
    sum=sum/8.0;
    printf("%.1lf",sum);
    return 0;
}

二维数组转置

题目描述: 编程实现使给定的一个N×M的二维整型数组转置,即行列互换。 输入描述: 第一行是两个整数N和M ,接下来N行整数,每行包含M个整数。整数之间用空格隔开 输出描述描述: 输出转置后的二维整型数组.每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车 样式输入:

2 3 1 2 3 4 5 6

样式输出:

1 4 2 5 3 6

源代码

#include <stdio.h>
int main()
{
    int a[100][100],i,j,n,m;
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<m-1;i++)
    {
        for(j=0;j<n-1;j++)
            printf("%d ",a[j][i]);
        printf("%d\n",a[n-1][i]);
    }
    for(i=0;i<n-1;i++)
        printf("%d ",a[i][m-1]);
    printf("%d",a[n-1][m-1]);
    return 0;
}  

魔方矩阵

题目描述: 输入一奇数n(n<20),打印出1->nn构成的魔方矩阵。 魔方矩阵的行列及对角线的和都相等。输入描述: 输入一奇数n(n<20) **输出描述描述:** 打印出1->nn构成的魔方矩阵,每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车 样式输入:

3

样式输出:

8 1 6 3 5 7 4 9 2

源代码

#include<stdio.h>
int main()
{
    int a[20][20],i,j,n,k=1,m1,m2;
    scanf("%d",&n);
    for(i=0;i<20;i++)
        for(j=0;j<20;j++)
            a[i][j]=0;
    while(k!=n*n+1)
    {
        if(k==1)
        {
            a[0][n/2]=1;
            m1=0;
            m2=n/2;
        }
        else
        {
            if(m1==0&&m2!=n-1)
            {
                if(a[n-1][m2+1]==0)
                {
                    a[n-1][m2+1]=k;
                    m1=n-1;
                    m2++;
                }
                else
                {
                    a[m1+1][m2]=k;
                    m1++;
                }
            }
            else if(m2==n-1&&m1!=0)
            {
                if(a[m1-1][0]==0)
                {
                    a[m1-1][0]=k;
                    m1--;
                    m2=0;
                }
                else
                {
                    a[m1+1][m2]=k;
                    m1++;
                }
            }
            else
            {
                if(a[m1-1][m2+1]==0)
                {
                    a[m1-1][m2+1]=k;
                    m1--;
                    m2++;
                }
                else
                {
                    a[m1+1][m2]=k;
                    m1++;
                }
            }
        }
        k++;
    }
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1;j++)
            printf("%d ",a[i][j]);
        printf("%d\n",a[i][n-1]);
    }
    for(j=0;j<n-1;j++)
        printf("%d ",a[n-1][j]);
    printf("%d",a[n-1][n-1]);
    return 0;
}  

统计

题目描述: 统计个位数为6的n位数,且能被m整除的共有多少个? 输入描述: 一个整数n(n<=5),表示该整数的位数,一个整数m(1~9); 输出描述描述: 符合条件的数的个数。 样式输入:

2 3

样式输出:

3
#include<stdio.h>
#include<math.h>
int main()
{
    int m,n,i,sum=0,min,max;
    scanf("%d%d",&n,&m);
    min=pow(10,n-1);
    max=pow(10,n);
    for(i=min;i<max;i++)
        if(i%10==6)
            if(i%m==0)
                sum++;
    printf("%d",sum);
    return 0;
}  

四位数

题目描述: 计算满足下述条件的四位数的个数:把数字abcd重新组成两个新的两位数:ac及db, 如果新组成的两个十位数ac>db,且ac必须是偶数且能被n(n为1~9的整数)整除,db必须是奇数,同时两个新数的十位数字均不为零。 输入描述: 一个1~9的整数。 输出描述描述: 符合条件的数的个数。 样式输入:

5

样式输出:

180

源代码

#include<stdio.h>
int main()
{
    int n,s,i,x,y,sum=0;
    scanf("%d",&n);
    for(i=1000;i<10000;i++)
    {
        x=i%10+i/100%10*10;
        y=i/10%10+i/1000%10*10;
        if(x<y && y%n==0 && y%2==0 && x%2==1 && x/10!=0 &&y/10!=0)
            sum++;
    }
    printf("%d",sum);
    return 0;
}

密码翻译

题目描述: 把某字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z,b改写成a,大写字母和其它字符保持不变,并输出翻译后的字符数组。 输入描述: 输入要翻译的密码字符串(长度小于100) 输出描述描述: 翻译后的字符串。 样式输入:

Adb Bcdza

样式输出:

Aca Bbcyz

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    int len,i;
    char a[100];
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(a[i]>='a'&&a[i]<='z')
        {
            if(a[i]=='a')
                a[i]='z';
            else
                a[i]--;
        }
    }
    for(i=0;i<len;i++)
        printf("%c",a[i]);
    return 0;
}  

身高预测

题目描述: 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) 0.54(cm) 女性成人时身高 = (faHeight 0.923 + moHeight) / 2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。 编程从键盘输入你的性别(用字符型变量存储,输入字符f表示女性,输入字符m表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量存储,输入字符y表示喜爱,输入字符n表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量存储,输入字符y表示喜爱,输入字符n表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。 输入描述: 从键盘输入性别、父母身高、是否喜爱体育锻炼、是否有良好的饮食习惯等条件。 输出描述描述: 身高(cm)。 样式输入:

f 165 155 y y

样式输出:

159.07

源代码

#include<stdio.h>
int main()
{
    double a,b,c,k=1;
    char ch1,ch2,ch3;
    scanf("%c",&ch1);
    scanf("%lf%lf",&a,&b);
    getchar();
    scanf("%c",&ch2);
    getchar();
    scanf("%c",&ch3);
    if(ch1=='f')
    {
        c=(a*0.923+b)/2.0;
        if(ch2=='y')
            c*=1.02;
        if(ch3=='y')
            c*=1.015;
    }
    else
    {        
        c=(a+b)*0.54*k;
        if(ch2=='y')
            c*=1.02;
        if(ch3=='y')
            c*=1.015;
    }
    printf("%.2lf",c);
    return 0;
}  

大奖赛现场统分

题目描述: 编写一个为某大奖赛现场统分的程序,在评委打分之后,及时通报评分结果。已知某大奖赛有n个选手参赛,m(m>2)个评委依次为参赛的选手评判打分,最高10分,最低0分。 统分规则为:在每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分后,取平均分为该选手的最后得分。 要求编程实现:根据n个选手的最后得分,从高到低排出名次表,以便确定获奖名单。 输入描述: 按以下顺序输入数据,数据之间用空格或回车间隔: 选手人数n(不超过40), 评委人数m(不超过20), 第1位选手的编号, m个评委的打分, 第2个选手的编号, m个评委的打分 第n位选手的编号, m个评委的打分。 输出描述描述: 分行打印每个选手的名次,编号,最后得分,选手得分保留一位小数。 样式输入:

5 5 11 9.5 9.6 9.7 9.4 9.0 12 9.0 9.2 9.1 9.3 8.9 13 9.6 9.7 9.5 9.8 9.4 14 8.9 8.8 8.7 9.0 8.6 15 9.0 9.1 8.8 8.9 9.2

样式输出:

1 13 9.6 2 11 9.5 3 12 9.1 4 15 9.0 5 14 8.8

源代码

#include<stdio.h>
int main()
{
    int n,m,i=0,j,z,a[40];
    int k1,k2;
    double c[40]={0},b[40][20],f,min,max,temp;
    scanf("%d",&n);
    scanf("%d",&m);
    z=n;
    while(z)
    {
        scanf("%d",&a[i]);
        for(j=0;j<m;j++)
            scanf("%lf",&b[i][j]);
        i++;
        z--;
    }
    for(i=0;i<n;i++)
    {
        max=b[i][0];
        min=b[i][0];
        k1=0;
        k2=0;
        for(j=1;j<m;j++)
        {
            if(b[i][j]>max)
            {
                max=b[i][j];
                k1=j;
            }
            if(b[i][j]<min)
            {
                min=b[i][j];
                k2=j;
            }
        }
        for(z=0;z<m;z++)
            if(z!=k1 && z!=k2)
                c[i]+=b[i][z];
        f=m-2;
        c[i]/=f;
    }
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(c[i]<c[j])
            {
                temp=c[i];
                c[i]=c[j];
                c[j]=temp;
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
    for(i=0;i<n;i++)
        printf("%d %d %.1lf\n",i+1,a[i],c[i]);
    return 0;    
}   

礼炮声响次数

题目描述: 在庆祝活动中。A,B,C三条军舰要同时开始鸣礼炮各n(n为整数)响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请问观众总共可以听到几次礼炮声? 输入描述: 一个整数(n) 输出描述描述: 一个整数,即听到礼炮声的次数m。 样式输入:

21

样式输出:

54

源代码

#include<stdio.h>
int main()
{
    int n,sum,i;
    int a[21]={0},b[21]={0},c[21]={0};
    scanf("%d",&n);
    sum=3*n-2;
    for(i=1;i<=5*(n-1);i++)
    {
        if(i%5==0&&i%6==0&&i%7==0)
            sum-=2;
        if((i%5==0&&i%6==0)||(i%5==0&&i%7==0)||(i%6==0&&i%7==0))
            sum--;
    }
    for(i=5*(n-1)+1;i<=6*(n-1);i++)
        if(i%6==0&&i%7==0)
            sum--;
    printf("%d",sum);
    return 0;
}  

产值翻番计算

题目描述: 假设当年工业产值为100,工业产值的增长率每年为c%,从键盘输入一个c(0<=c<=30),试求工业产值过多少年可实现翻番(即增加一倍)。 注:后一年的产值是在前一年的基础上增长c%。 输入描述: 一个0~30的实数(增长率)。 输出描述描述: 实现翻番的年数。 样式输入:

6

样式输出:

12

源代码

#include<stdio.h>
int main()
{
    int c,yy=0;
    float m=100,k;
    scanf("%d",&c);
    k=c/100.0;
    while(m<200)
    {
        yy++;
        m+=k*m;
    }
    printf("%d",yy);
    return 0;
}  

福利彩票(双色球)

题目描述: 现在买彩票成为一种发财致富的途径,当然中奖的机会还是比较少,特别是大奖。 其游戏规则如下: 彩民从1~33中选择六个随机的号码,作为红球号码,从1~16中选择一个号码作为篮球号码。这样一共有7个号码。 中奖规则是:与开奖号码相比, 一等奖,红色号码和蓝色号码必须完全一样; 二等奖,六个红色号码相同,但蓝色号码不同; 三等奖5个红色号码相同(不分先后顺序)和一个蓝色号码相同; 四等奖,5个红色号码相同并且蓝色号码不同 或者 4个红色号码相同并且蓝色号码相同; 五等奖 4个红色号码相同并且蓝色号码不同 或者 3个红色号码相同并且蓝色号码相同; 六等奖 蓝色号码必须相同,红色号码可以为0、1、2个。 其他的号码属于没中奖 输入描述: 输入第一行是7个整数,表示开奖号码,前面六个是红色球号码,最后一个是篮球号码,接下来的5行,每行包含合法的彩票号码(前面六个是红色球号码,最后一个是篮球号码),每个号码之间用空格隔开。 输出描述描述: 对于每一个彩票号码,在一行中 输出其相应的奖励等级,一等奖为1,二等奖为2,三等奖为3,四等奖为4,五等奖为5,六等奖为6,无奖为0。 样式输入:

23 1 8 9 28 16 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9

样式输出:

6 6 6 6 6

源代码

#include<stdio.h>
int main()
{
    int a[7],b[7],i,sum=0;
    for(i=0;i<7;i++)
        scanf("%d",&a[i]);
    while(scanf("%d %d %d %d %d %d %d",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&b[6])!=EOF)
    {
        for(i=0;i<6;i++)
            if(a[i]==b[i])
                sum++;
        if(sum==6&&a[6]==b[6])
            printf("1\n");
        else if(sum==6&&a[6]!=b[6])
            printf("2\n");
        else if(sum==5&&a[6]==b[6])
            printf("3\n");
        else if((sum==5&&a[6]!=b[6])||(sum==4&&a[6]==b[6]))
            printf("4\n");
        else if((sum==4&&a[6]!=b[6])||(sum==3&&a[6]==b[6]))
            printf("5\n");
        else if(a[6]==b[6])
            printf("6\n");
        else
            printf("0\n");
        sum=0;
    }
    return 0;
}  

移动数列

题目描述: 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。 输入描述: 输入总数n(0~20的整数),后移位数m(m<n),输入n个整数,间隔以空格。

输出描述: 移动后的数列。 样式输入:

8 3 1 2 3 4 5 6 7 8

样式输出:

6 7 8 1 2 3 4 5

源代码

#include <stdio.h>
int main()
{
    int a[20],i,n,m,b[20],k=0;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=n-1;i>=n-m;i--)
    {
        b[k]=a[i];
        k++;
    }
    for(i=n-1;i>=m;i--)
        a[i]=a[i-m];
    for(i=k-1;i>=0;i--)
        printf("%d ",b[i]);
    for(i=m;i<n-1;i++)
        printf("%d ",a[i]);
    printf("%d",a[n-1]);
    return 0;
}  

行李托运

题目描述: 铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超过50公斤,超过部分每公斤按0.25元计费。请编程实现自动计费功能。 输入描述: 输入一个整数,表述要托运的行李的重量,单位为公斤 输出描述: 托运的行李重量(单位公斤)空格和运费(单位为元,保留2位小数)。 样式输入:

45

样式输出:

45 6.75

源代码

#include<stdio.h>
int main()
{
    int n;
    double sum=0;
    scanf("%d",&n);
    printf("%d ",n);
    if(n<=50)
        sum+=0.15*n;
    else
        sum+=0.15*50+0.25*(n-50);
    printf("%.2lf",sum);
    return 0;
}

分数比较

题目描述: 请编程实现比较两个分数的大小。(注:进行分数的通分后再比较分子的大小) 输入描述: 输入两个分数,格式为分子/分母 分子/分母,分子,分母均为整数。 输出描述描述: 输出比较后的结果。如果等于,则输出分子/分母=分子/分母;如果小于分子/分母<分子/分母;如果大于,则输出分子/分母>分子/分母 样式输入:

1/2 1/3

样式输出:

1/2>1/3

源代码

#include<stdio.h>
int main()
{
    int a,b,c,d,x,y;
    scanf("%d/%d %d/%d",&a,&b,&c,&d);
    x=a*d;
    y=b*c;
    if(a<0 || c<0)
    {
        if(a>0 && c<0)
            printf("%d/%d>%d/%d",a,b,c,d);
        if(a<0 && c>0)
            printf("%d/%d<%d/%d",a,b,c,d);
        if(a<0 && c<0)
            if(x>y)
                printf("%d/%d<%d/%d",a,b,c,d);
            else if(x==y)
                printf("%d/%d=%d/%d",a,b,c,d);
            else
                printf("%d/%d>%d/%d",a,b,c,d);
    }
    else
        if(x>y)
            printf("%d/%d>%d/%d",a,b,c,d);
        else if(x==y)
            printf("%d/%d=%d/%d",a,b,c,d);
        else
            printf("%d/%d<%d/%d",a,b,c,d);
    return 0;
} 

求人数

题目描述: 定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人? 输入描述: 输入50个学生的成绩 输出描述描述: 输出一个整数表示高于平均成绩的人数

样式输入:

45 46 47 48 49 50 41 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94

样式输出:

25

源代码

#include<stdio.h>
int avg(int a[50])
{
    int i,sum=0;
    double k=0;
    for(i=0;i<50;i++)
        k+=a[i];
    k/=50.0;
    for(i=0;i<50;i++)
        if(a[i]>k)
            sum++;
    return sum;
}
int main()
{
    int a[50],n,i;
    for(i=0;i<50;i++)
        scanf("%d",&a[i]);
    n=avg(a);
    printf("%d",n);
    return 0;
}

e数列

题目描述: ┌ e(1)=e(2)=1, └ e(n)=(n-1)e(n-1)+(n-2)e(n-2) (n>2) 称为e数列, 每一个e(n) (n=1,2,…)称为e数。求[1,m]之内: (1)最大的e数。 (2)e数的数目 输入描述: 输入一个整数,表示m的值,m<300000; 输出描述描述: 输出两个整数,第一个表示最大的e数,第二个表示e数的数目; 样式输入:

30000

样式输出:

16687 8

源代码

#include<stdio.h>
int main()
{
    int e[20]={1,1,1},m,j,i=2,max;
    scanf("%d",&m);
    while(e[i]<=300000)
    {
        i++;
        e[i]=(i-1)*e[i-1]+(i-2)*e[i-2];
    }
    for(j=1;j<i;j++)
    {
        if(e[j]<=m)
            max=e[j];
        else 
            break;
    }
    printf("%d\n%d",max,j-1);
    return 0;
}  

运算符++前置后置练习(胡宁静)

题目描述: 程序部分代码如下,写出一个完整的程序,输出m,n的值。 int i=8,j=10,m,n; m=++i; n=j++; m=++j; n=i++; 输入描述: 无输入 输出描述描述: 输出m,n的值(不含回车,m n中间有一空格) 样式输入:

样式输出:

12 9

源代码

#include<stdio.h>
main()
{
    int i=8,j=10,m,n;
    m=++i;
    n=j++;
    m=++j;
    n=i++;
    printf("%d %d",m,n);
}  

按格式要求显示日期

题目描述: 接收用户从键盘输入的日期信息并将其显示出来。其中,输入日期的形式为月/日/年(即mm/dd/yyyy),输出日期的形式为年月日(即yyyymmdd)。 输入描述: 以形式为“月/日/年”(即mm/dd/yyyy)的格式,输入一个日期。 输出描述描述: 以形式为年月日(即yyyymmdd)输出日期。

样式输入:

2/17/2010

样式输出:

20100217

源代码

#include<stdio.h>
main()
{
    int y,m,d;
    scanf("%d/%d/%d",&m,&d,&y);
    printf("%d%02d%02d",y,m,d);
}  

求圆的周长和面积

题目描述: 从键盘输入圆的半径,求该圆的周长和面积。(注: 取3.14) 输入描述: 一个实数r。 输出描述描述: 圆的周长和面积。 样式输入:

1

样式输出:

r=1.00,l=6.28,s=3.14

源代码

#include<stdio.h>
#define PI 3.14
main()
{
    float r,l,s;
    scanf("%f",&r);
    printf("r=%.2f,l=%.2f,s=%.2f",r,2*PI*r,PI*r*r);
}  

计算分段函数

题目描述: 计算分段函数 y=x (x<0) y=0 (x=0) y=sqrt(x) (x>0) 输入x,打印出y值。 输入描述: 一个实数x。 输出描述描述: x的值和分段函数y的值。 样式输入:

0

样式输出:

x=0.000000,y=0.000000

源代码

#include<stdio.h>
#include<math.h>
main()
{
    double x,z;
    scanf("%lf",&x);
    if(x>0)
        z=sqrt(x);
    else if(x==0)
        z=0;
    else
        z=x;
    printf("x=%lf,y=%lf",x,z);
}  

确定一个数的位数

题目描述: 编写程序用来确定一个数的位数。如: 输入: 567 输出:The number 567 has 3 digits 假设输入的数最多不超过四位。 输入描述: 一个整数n。 输出描述描述: 按指定格式输出这个数的位数。 样式输入:

567

样式输出:

The number 567 has 3 digits

源代码

#include<stdio.h>
main()
{
    int n,digits=1,k;
    scanf("%d",&n);
    k=n;
    if(n>9)
    {
        while(n/10>0)
        {
            digits++;
            n/=10;
        }
    printf("The number %d has %d digits",k,digits);
    }
    else
        printf("The number %d has 1 digit",k);
}  

显示某个数的英文单词

题目描述: 用switch语句编写一个程序,要求用户输入一个两位的整数,显示这个数的英文单词。例如:输入45,显示forty-five。注意:对11~19要进行特殊处理。 输入描述: 一个两位的整数n。 输出描述描述: 这个数的英文单词。 样式输入:

45

样式输出:

forty-five

源代码

#include<stdio.h>
main()
{
    int n,s,m;//s为十位数,m为个位数。
    scanf("%d",&n);
    switch(n)
    {
    case 10:printf("ten");break;
    case 11:printf("eleven");break;
    case 12:printf("twelve");break;
    case 13:printf("thirteen");break;
    case 14:printf("fourteen");break;
    case 15:printf("fifteen");break;
    case 16:printf("sixteen");break;
    case 17:printf("seventeen");break;
    case 18:printf("eighteen");break;
    case 19:printf("nineteen");break;
    }
    s=n/10;
    m=n%10;
    if(s>1)
    {
        switch(s)
        {
        case 2:printf("twenty");break;
        case 3:printf("thirty");break;
        case 4:printf("fourty");break;
        case 5:printf("fifty");break;
        case 6:printf("sixty");break;
        case 7:printf("seventy");break;
        case 8:printf("eightty");break;
        case 9:printf("ninety");break;
        }
        switch(m)
        {
        case 0:printf("");break;
        case 1:printf("-one");break;
        case 2:printf("-two");break;
        case 3:printf("-three");break;
        case 4:printf("-four");break;
        case 5:printf("-five");break;
        case 6:printf("-six");break;
        case 7:printf("-seven");break;
        case 8:printf("-eight");break;
        case 9:printf("-nine");break;
        }
    }
}  

找出最大数

题目描述: 用户从键盘输入若干个数,当输入0或负数时输出这些数中的最大非负数。注意,输入的数不要求一定是整数。 输入描述: 输入若干个数,最后一个为0或负数。 输出描述描述: 最大非负数。 样式输入:

2.3 6.3 5.4 0

样式输出:

max=6.300000

代码

#include<stdio.h>
main()
{
    float max=0,n;
    scanf("%f",&n);
    while(n>0)
    {
        if(max<n)
            max=n;
        scanf("%f",&n);
        if(n==0)
            break;
    }
    printf("max=%f",max);
}  

求最简分式

题目描述: 用户输入一个分数,要求将其约分,输出最简分式。例如:输入3/12,输出1/4。提示:为了把分式化简为最简分式,首先求分子和分母的最大公约数,然后分子和分母分别除以最大公约数。 输入描述: 一个分数。 输出描述描述: 最简分式。 样式输入:

3/12

样式输出:

最简分数为1/4

源代码

#include<stdio.h>
main()
{
    int n,m,i;
    scanf("%d/%d",&n,&m);
    for(i=n;i>0;i--)
        if(n%i==0 && m%i==0)
        {
            printf("最简分数为%d/%d",n/i,m/i);
            break;
        }
}  

计算多项式的和

题目描述: 计算从2~n的自然数中偶数的和,即2+4+6+8+…的值。 注意:n可能是偶数,也可能是奇数。 输入描述: 一个整数n。 输出描述描述: 从2~n的自然数中偶数的和。 样式输入:

100

样式输出:

sum=2550

源代码

#include<stdio.h>
main()
{
    int n,sum=0,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        if(i%2==0)
            sum+=i;
    printf("sum=%d",sum);
}  

阶乘累加

题目描述: 计算1!+2!+3!……+n! 输入描述: 一个整数n(n<=20)。

输出描述描述: 1到n的阶乘累加之和。 样式输入:

5

样式输出:

s=153

源代码

#include<stdio.h>
main()
{
    int n,s=0,m,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(j=1,m=1;j<=i;j++)
            m*=j;
        s+=m;
    }
    printf("s=%d",s);
}  

计算e的近似值

题目描述: 利用泰勒级数 e=1+1/1!+1/2!+……+1/n!, 计算e的近似值。精度要求最后一项的绝对值小于f(如:f=1e-5)。 输入描述: 精度。 输出描述描述: e的近似值,保留6位小数。 样式输入:

1e-5

样式输出:

e=2.718282

源代码

#include<stdio.h>
main()
{
    int n,m=1,i,k;
    float e=1,s;
    scanf("%f",&s);
    for(n=1;;n++)
    {
        for(i=1,k=1;i<=n;i++)
            k*=i;
        m=k;
        e+=1.0/m;
        if(1.0/m<s)
            break;
    }
    printf("e=%f",e);
}  

计算sinx的值

题目描述: 利用泰勒级数 sinx=x-x^3/3!+x^5/5!-x^7/7!+…… 计算sinx的值。要求最后一项的绝对值小于1e-5,并统计出此时累加的项数。 输入描述: 一个实数x(一个角度的弧度数) 输出描述描述: sinx的值和累加的项数。 样式输入:

1.57

样式输出:

sinx=1.000000,n=6

源代码

#include<stdio.h>
#include<math.h>
void main()
{
    int n=1,s=3,j,m=1;
    double sinx,x,z,i=3;
    scanf("%lf",&x);
    sinx=x;
    do
    {
        for(j=1,m=1;j<=s;j++)
            m*=j;
        z=(pow(-1,n)*pow(x,i))/m;
        sinx+=z;
        n++;
        i+=2;
        s+=2;
    }while(fabs(z)>=1e-5);
    printf("sinx=%lf,n=%d",sinx,n);
}  

题目描述: 打印n(三位的整数)以内的所有水仙花数。所谓水仙花数是指一个三位的整数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153=1^3+5^3+3^3。 输入描述: 一个整数n。 输出描述描述: 符合条件的水仙花数。 样式输入:

400

样式输出:

153 370 371

源代码

#include<stdio.h>
main()
{
    int n,i,j,k,r;
    scanf("%d",&n);
    for(i=100;i<=n;i++)
    {
        j=i%10;
        k=(i%100)/10;
        r=i/100;
        if(i==j*j*j+k*k*k+r*r*r)
            printf("%d\n",i);
    }
}  

打印ASCII码值、字符对照表

题目描述: 打印码值为n1~n2( n1和n2的值在33~127范围内)的ASCII码值、字符对照表。 输入描述: 两个整数n1和n2(值在33~127范围内)。 输出描述描述: 对照表。要求:ASCII码值占7列,字符占9列,向右对齐,每行打3个码值。 样式输入:

65 70

样式输出: 65 A 66 B 67 C 68 D 69 E 70 F 源代码

#include<stdio.h>
void main()
{
    int n1,n2,i,j;
    scanf("%d",&n1);
    scanf("%d",&n2);
    for(i=n1,j=1;i<=n2;i++,j++)
    {
        printf("%7d%9c",i,i);
        if(j%3==0)
            printf("\n");
    }
}  

第n年时有多少头母牛?

题目描述: 递增的牛群:若一头小母牛,从第4年开始每年生一头小母牛。按此规律,第n年时有多少头母牛? 输入描述: 一 个整数n(n>=4 && n<=20)。 输出描述描述: 第n年时的母牛数。 样式输入:

4

样式输出:

2

源代码

#include<stdio.h>
void main()
{
    int n,f,f1,f2,f3,i;
    scanf("%d",&n);
    for(i=4,f1=f2=f3=1;i<=n;i++)
    {
        f=f1+f3;
        f3=f2;
        f2=f1;
        f1=f;

    }
    printf("%d",f);
}  

百马百担问题

题目描述: 百马百担问题:有n1匹马,驮n2担货,大马驮3担,中马驮2担,两匹小马驮1担,问有多少种驮法? 注意:每种马至少有1匹. 输入描述: 两个整数n1(马匹数)和n2(担货数)。 输出描述描述: 驮法数。 样式输入:

100 100

样式输出:

6

源代码

#include<stdio.h>
main()
{
    int n1,n2,sum=0,x,y,z;//x,y,z分别为大马匹数,中马匹数和小马匹数。
    scanf("%d %d",&n1,&n2);
    for(x=1;x<=n1;x++)
    {
        for(y=1;y<=n1-x;y++)
        {
            z=n1-x-y;
            if((3*x+2*y+0.5*z)==n2)
                sum++;
        }
    }
    printf("%d",sum);
}  

求可行的购鱼方案

题目描述: 有钱m元,要买金鱼n条。市场上的金鱼主要有三个品种,价格分别为:红狮头每条0.9元,黑骑士每条1.2元,白金刚每条1.6元。如果每一个品种都至少购买一条,要买足n条金鱼,且正好用完n元。试编写程序求出可行的购鱼方案。 输入描述: 两个整数m(钱数)和n(金鱼总数)。 输出描述描述: 购鱼方案。注:一种方案打一行,按红狮头、黑骑士、白金刚的顺序打出条数,数据之间留一个空格。 样式输入:

30 25

样式输出:

4 18 3 8 11 6 12 4 9

源代码

#include<stdio.h>
void main()
{
    int n,m,i,j;
    double k;
    scanf("%d%d",&m,&n);
    for(i=1;i<=m/1.6;i++)
    {
        for(j=1;j<=(m-1.6*i)/1.2;j++)
        {
            k=1.6*i+1.2*j+0.9*(n-i-j);
        if(k==m)
            printf("%d %d %d\n",n-i-j,j,i);
        }
    }  
}  

最低位(二进制的转换)

题目描述: 任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。例如,A=88,则二进制位1011000,则最低位是1000,输出为8。再例如A=7,则二进制位111,则最低位是1,输出为1。 输入描述: 输入包含一个整数A(1<=A<=109) 输出描述描述: 对应输入的最低位(输出不包含回车) 样式输入:

8

样式输出:

8

源代码

#include<stdio.h>
#include<math.h>
#define N 10
main()
{
    int A,law,a[N],i,j;
    scanf("%d",&A);
    for(i=0;i<=N;i++)
    {
        a[i]=A%2;
        A/=2;
        if(a[i]==1)
            break;
    }
    law=pow(2,i);
    printf("%d",law);
}  

Fibonacci数列

题目描述: Fibonacci数列{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …},可以如下定义: F0=0 F1=1 Fi=F(i-1)+F(i-2) 对于所有的i大于2 写个程序计算Fibonacci数 输入描述: 第一行为需要测试个数T,接着的1行,输入T个数据,每一个数据包含一个数n(0<=n<=45 ),即你需要计算的F(n) 输出描述描述: 对每输入的数n,输出对应的F(n),每个F(n)之间包含一个空格,最后一行输出不含回车。

样式输入:

5 0 3 5 9 20

样式输出:

0 2 5 34 6765

源代码

#include<stdio.h>
int main()
{
    int n,i,k;
    int b[46]={0,1},a[100];
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=2;i<=45;i++)
    {
        b[i]=b[i-1]+b[i-2];
    }
    for(i=0;i<n-1;i++)
    {
        k=a[i];
        printf("%d ",b[k]);
    }
    k=a[n-1];
    printf("%d",b[k]);
    return 0;
}

源代码

#include<stdio.h>
int main()
{
    int n,i,k;
    int b[46]={0,1},a[100];
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=2;i<=45;i++)
    {
        b[i]=b[i-1]+b[i-2];
    }
    for(i=0;i<n-1;i++)
    {
        k=a[i];
        printf("%d ",b[k]);
    }
    k=a[n-1];
    printf("%d",b[k]);
    return 0;
} 


蛇形矩阵1—一个方向生成(胡宁静) 题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形。注意看样式输出。 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入:

5

样式输出:

1 3 6 10 15 2 5 9 14 4 8 13 7 12 11

源代码

#include<stdio.h>
int main()
{
    int n,a[20]={1},i,j;
    int N,k,z,s;
    scanf("%d",&N);
    n=N;
    for(i=0,z=1;i<N-1;i++)
    {
        s=i+2;
        for(j=1;j<n;j++)
        {
            a[j]=a[j-1]+s;
            s++;
        }
        for(k=0;k<n-1;k++)
            printf("%d ",a[k]);
        printf("%d\n",a[n-1]);
        a[0]+=z;
        z++;
        n--;
    }
    printf("%d",a[0]);
    return 0;
}  

蛇形矩阵2—双向生成

题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形。注意看样式输出。 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入:

5

样式输出:

1 3 4 10 11 2 5 9 12 6 8 13 7 14 15

源代码

#include<stdio.h>
int main()
{
    int n,a[20][20]={1},i,j;
    int N,k,z,s,f;
    int temp;
    scanf("%d",&N);
    n=N;
    for(i=0,z=1;i<N;)
    {
        s=i+2;
        for(j=1;j<n;j++)
        {
            a[i][j]=a[i][j-1]+s;
            s++;
        }
        i++;
        a[i][0]=a[i-1][0]+z;
        z++;
        n--;
    }
    n=N;
    for(i=2;i<N;i+=2)
    {
        f=i;
        for(k=0,j=0;k<=i/2;k++)
        {
            temp=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=temp;
            i--;
            j++;
        }
        i=f;
    }
    for(i=0;i<N-1;i++)
    {
        for(k=0;k<n-1;k++)
            printf("%d ",a[i][k]);
        printf("%d\n",a[i][n-1]);
        n--;
    }
    printf("%d",a[N-1][0]);
    return 0;
}  

猪的安家

题目描述: Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。 输入描述: 输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10),表示Andy建立猪圈的次数,接下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1 输出描述描述: 输出包含一个正整数,即为Andy家至少养猪的数目 样式输入:

3 3 1 5 1 7 2

样式输出:

16

源代码

#include<stdio.h>
int main()
{
    int n,ai,bi;
    int i,j,k,a[1000],s=1000;
    scanf("%d",&n);
    for(i=0;i<1000;i++)
        a[i]=i+1;
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&ai,&bi);
        k=0;
        for(j=0;j<s;j++)
            if(a[j]%ai==bi)
            {
                a[k]=a[j];
                k++;
            }
        s=k;
    }
    if(k!=0)
        printf("%d",a[0]);
    return 0;    
}  

最大乘积的整数的拆分

题目描述: 将一个整数N分解成各不相同的加数的和,使这些加数的乘积最大。N范围为[5,1000] 提示:从乘积最大的原则出发:多拆3,少拆2,不拆1,1对乘法没有贡献。如6拆为3+3>3+2+1;4拆分为2+2>3+1,因此,拆分的最大数为3. 输入描述: 输入一个整数N(5<=N<=1000) 输出描述描述: 能够使得积最大的加数序列,序列按拆分数由小到大的顺序排列,每个数字之间有一个空格,最后一个数字没有空格。 样式输入:

7

样式输出:

2 2 3

源代码1

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n%3==1)
    {
        printf("2 2");
        n-=4;
        while(n)
        {
            printf(" 3");
            n-=3;
        }
        //printf("4");
    }
    else if(n%3==2)
    {
        printf("2");
        n-=2;
        while(n)
        {
            printf(" 3");
            n-=3;
        }
    }
    else
    {
        printf("3");
        n-=3;
        while(n)
        {
            printf(" 3");
            n-=3;
        }
    }
    return 0;
} 

源代码

#include<stdio.h>
int main()
{
    int n,i;
    scanf("%d",&n);
    if(n%3==1)//余数为一的最后拆成2和2,其余拆成3.
    {
        printf("2 2");
        while(n!=4)
        {
            n-=3;
            printf(" 3");
        }
        
    }
    else if(n%3==2)//余数为二的拆一个2,其余为3.
    {
        printf("2");
        while(n!=2)
        {
            n-=3;
            printf(" 3");
        }
        
    }
    else//为0的均为3.
    {
        while(n!=3)
        {
            n-=3;
            printf("3 ");
        }
        printf("3");
    }
    return 0;
}  

插队—数的插入

题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。 例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为:1 2 3 6 7 9; 输入描述: 输入包含两部分,第一部分先输入n(2<n<=100),表示数组中元素个数,接着输入n个已经排序好的数,第二部分为待插入的数据 输出描述描述: 新的排序好的数组元素,数组元素之间用一个空格分隔,最后一个元素后不要空格。 样式输入:

5 1 2 6 7 9 3

样式输出:

1 2 3 6 7 9

源代码

#include<stdio.h>
int main()
{
    int a[101],n,i,j;
    int s,temp;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&s);
    for(i=0;i<n;i++)
    {
        if(a[i]>s)
        {
            for(j=n;j>i;j--)
                a[j]=a[j-1];    
            a[i]=s;
            break;
        }
    }
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("%d",a[n]);
    return 0;
}  

卫星定位—数的查找

题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。 例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出数值-1;

输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据 输出描述描述: 待查找的元素位置 样式输入:

5 1 2 6 7 9 7

样式输出:

4

[源代码

#include<stdio.h>
int main()
{
    int n,k,a[20];
    int i,low,top,mid,loc=-1;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&k);
    low=0;
    top=n-1;
    while(low<top)
    {
        mid=(low+top)/2;
        if(a[mid]>k)
            top=mid-1;
        else if(a[mid]<k)
            low=mid;
        else
        {
            loc=mid+1;
            break;
        }
    }
    printf("%d",loc);
    return 0;
}  

警察抓贼—数的删除

题目描述: 编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个 输入描述: 输入包含两部分,第一部分先输入n,接着输入n个原数据。第二部分为待删除的元素; 输出描述描述: 删除特定元素后的剩余元素,如果没有元素被删除,则原样输出;元素之间用一个空格分隔,最后一个元素没有回车。 样式输入:

8 1 3 4 6 3 5 3 6 3

样式输出:

1 3 4 6 5 3 6

源代码

#include<stdio.h>
int main()
{
    int n,a[1000];
    int s,i,t=0,m,j=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&s);
    for(i=0;i<n;i++)
        if(a[i]==s)
            t++;
    if(t%2!=0)
        m=(t+1)/2;
    else
        m=t/2;
    for(i=0;i<n-1;i++)
    {
        if(a[i]!=s)
            printf("%d ",a[i]);
        else
        {
            j++;
            if(j!=m)
                printf("%d ",a[i]);
        }
    }
    if(a[n-1]!=s)
        printf("%d",a[n-1]);
    else
    {
        j++;
        if(j!=m)
            printf("%d",a[n-1]);
    }
    return 0;
}  

是非黑白—字符串比较

题目描述: 编写函数实现两个等长字符串大小比较(两字符串长度<81)。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串(字符串输出含回车),如果相等则返回数值0(不含回车);要求不使用cmpstr()函数完成; 输入描述: 输入待比较的两个字符串 输出描述描述: 字符串比较结果 样式输入:

abcdefg abcdeff

样式输出:

abcdefg

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[81],b[81];
    int i,len1,len2,max,s1=0,s2=0;
    scanf("%s",a);
    scanf("%s",b);
    len1=strlen(a);
    len2=strlen(b);
    max=(len1>len2)?len1:len2;
    for(i=0;i<len2;i++)
    {
        if(a[i]<b[i])
        {
            s2++;
            break;
        }
        if(a[i]>b[i])
        {
            s1++;
            break;
        }
    }
    if(s1==1)
        puts(a);
    if(s2==1)
        puts(b);
    if(s1==0 && s2==0)
    {
        if(len1>len2)
            puts(a);
        else if(len1<len2)
            puts(b);
        else
            printf("0");
    }
    return 0;
}  

搭桥—字符串连接

题目描述: 编写函数将两个升序排列的字符串(串长<81)融合成一个字符串,融合后的字符串仍然是升序排列的。

输入描述: 输入两升序字符串 输出描述: 融合后的字符串 (含回车符) 样式输入:

acefi bdfg

样式输出:

abcdeffgi

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[162],b[81];
    int i,j,len,temp;
    scanf("%s",a);
    scanf("%s",b);
    strcat(a,b);
    len=strlen(a);
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)
        {
            if(a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    puts(a);
    return 0;
}  

一清二楚—字符串统计

题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格) 输入描述: 一混合字符串,最大长度为200 输出描述描述: 各类字符出现频率,最后一行不含回车。 样式输入:

abcdefg9999////

样式输出:

ch:7 num:4 other:4

源代码

#include<stdio.h>
#include<string.h>
main()
{
  1:  char a[201];
    int ch=0,num=0,other=0,i,k;
    gets(a);
    k=strlen(a);
    for(i=0;i<k;i++)
    {
        if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
            ch++;
        else if(a[i]>='0'&&a[i]<='9')
            num++;
        else
            other++;
    }
    printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
}  

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[200];
    int ch=0,num=0,other=0,len,i;
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(a[i]>='0' && a[i]<='9')
            num++;
        else if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z'))
            ch++;
        else 
            other++;
    }
    printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
    return 0;
}  

克隆—字符串的拷贝(胡宁静)

题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中; 输入描述: 输入两字符串 输出描述描述: 输出第二个字符串,注意:输出含回车。 样式输入:

Abdfeg Bdfad

样式输出:

Abdfe

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[100],b[100];
    int len1,len2,i;
    scanf("%s %s",a,b);
    len1=strlen(a);
    len2=strlen(b);
    if(len1<len2)
    {
        for(i=0;i<len1;i++)
            b[i]=a[i];
        b[len1]='\0';
    }
    else
    {
        for(i=0;i<len2;i++)
            b[i]=a[i];
    }
    puts(b);
    return 0;

}

2:源代码

#include<stdio.h>
#include<string.h>
int main()
{
    int len1,len2,i;
    char a[100],b[100];
    gets(a);
    gets(b);
    len1=strlen(a);
    len2=strlen(b);
    if(len1<len2)
        for(i=0;i<len1;i++)
            printf("%c",a[i]);
    else
    {
        for(i=0;i<len2;i++)
            printf("%c",a[i]);
    }
    return 0;
}  

字母转换

题目描述: 输入一个字符串(长度<100),将其中所有大写字母改为小写字母,而所有小写字母全部改为大写字母,其余字符原样输出然后输出前n个字符。 设计步骤 ①输入字符串; ②用循环判断字符串中的每个字符是大写还是小写,若是大写要转换成小写,是小写要转换成大写:大写与小写字母的转换关系是“小写字母=大写字母+32” ③用printf输出该字符串前n个字符。 输入描述: 输入数据为1个数字,表示输出字符窜长度(n<100),接着输入1个字符串,其长度不限,可包含键盘上可见的所有字符 输出描述描述: 输出为1个字符串,根据输入数据,将其中的大写字符转换成小写,小写转换成大写,其余字符不变 样式输入:

5 FG56hj

样式输出:

fg56H

源代码

#include<stdio.h>
int main()
{
    int n,i;
    char a[100];
    scanf("%d",&n);
    getchar();
    gets(a);
    for(i=0;i<n;i++)
    {
        if(a[i]<='z' && a[i]>='a')
            printf("%c",a[i]-32);
        else if(a[i]<='Z' && a[i]>='A')
            printf("%c",a[i]+32);
        else
            printf("%c",a[i]);
    }
    return 0;
}  

数字转换

题目描述: 输入一个数字,大小<100000,将其中每位数字进行转换后输出,规则如下: 数字0与9互换、1与8互换、2与7互换、3与6互换、4与5互换。 注意:要考虑首位数字为9时的转换结果。 输入描述: 输入数据为1个数字,大小<100000 输出描述描述: 输出为1个根据转换规则转换完成后的数字 样式输入:

56789

样式输出:

43210

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[6];
    int i,len;
    scanf("%s",a);
    len=strlen(a);
    if(a[0]!='9')
    {
        if(a[0]=='1')
            printf("8");
        if(a[0]=='2')
            printf("7");
        if(a[0]=='3')
            printf("6");
        if(a[0]=='4')
            printf("5");
        if(a[0]=='5')
            printf("4");
        if(a[0]=='6')
            printf("3");
        if(a[0]=='7')
            printf("2");
        if(a[0]=='8')
            printf("1");
    }
    for(i=1;i<len;i++)
    {
        if(a[i]=='0')
            printf("9");
        if(a[i]=='1')
            printf("8");
        if(a[i]=='2')
            printf("7");
        if(a[i]=='3')
            printf("6");
        if(a[i]=='4')
            printf("5");
        if(a[i]=='5')
            printf("4");
        if(a[i]=='6')
            printf("3");
        if(a[i]=='7')
            printf("2");
        if(a[i]=='8')
            printf("1");
        if(a[i]=='9')
            printf("0");
    }
    return 0;

}  

函数求解1/n的累乘

题目描述: 利用自定义函数编写程序,求下面的式子: Y=11/21/3……*1/n (n的数值由键盘输入,n<=10)

输入描述: 输入一个正整数

输出描述描述: 输出为小数,保留小数点后12位有效数字。 样式输入:

3

样式输出:

0.166666666667

源代码

#include<stdio.h>
int main()
{
    int n,i;
    double s,y=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        s=i;
        y*=1/s;
    }
    printf("%.12lf",y);
    return 0;
}  

函数求解1/n的累减(谌海军)

题目描述: 利用自定义函数编写程序,求下面的式子: Y=1-1/2-1/3……-1/n (n的数值由键盘输入,n<=100) 输入描述: 输入一个正整数 输出描述描述: 输出为小数,保留小数点后8位有效数字。 样式输入:

8

样式输出:

-0.71785714

源代码

#include<stdio.h>
int main()
{
    int n,i;
    double s,y=1;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        s=i;
        y-=1/s;
    }
    printf("%.8lf",y);
    return 0;
}  

换汽水

题目描述: 1块钱1瓶汽水,3个空汽水瓶换1瓶汽水。n块钱能喝几瓶汽水? 输入描述: 输入为一个正整数n(1<=n<=100),表示钱数。 输出描述描述: 输出为一个正整数,表示可喝汽水的瓶数。 样式输入:

10

样式输出:

15

源代码

#include<stdio.h>
int main()
{
    int n,sum,s;
    scanf("%d",&n);
    sum=n;
    while(n)
    {
        if(n==2)
        {
            sum+=1;
            break;
        }
        if(n<2)
            break;
        s=n/3;
        sum+=s;
        n=n%3+s;
    }
    printf("%d",sum);
    return 0;
}  

聪明的顾客

题目描述: 1瓶汽水卖1块钱,顾客还可以用3个空汽水瓶换1瓶汽水喝。请问聪明的顾客最少可以花多少钱买到n瓶汽水喝? 说明:当顾客手中有两个空汽水瓶的时候,如果店家剩余1瓶以上,可以选择先借用1瓶汽水,喝完后连同手里先前已有的两个空汽水瓶还给店家即可。 输入描述: 输入为一个正整数n(1<=n<=100),表示可卖汽水瓶数。 输出描述描述: 输出为一个正整数,表示所花钱数。 样式输入:

10

样式输出:

7

源代码

#include<stdio.h>
int main()
{
    int n,sum,s,i,k,a[70]={0,1};
    scanf("%d",&n);
    for(i=2;i<70;i++)
    {
        k=i;
        sum=i;
        while(i)
        {
            if(i==2)
            {
                sum+=1;
                break;
            }
            if(i<2)
                break;
            s=i/3;
            sum+=s;
            i=i%3+s;
        }
        i=k;
        a[i]=sum;
    }
    for(i=0;i<70;i++)
        if(a[i]==n)
        {
            printf("%d",i);
            break;
        }
    return 0;
}  

字符串起始位置

题目描述: 有字符串a(长度<=100),b(长度<=10),计算b串在a串中首次出现的位置。 输入描述: 输入为两个字符串,第一个字符串长度小于100,第二个字符串长度小于10; 输出描述描述: 若b串在a串中出现,输出为一个正整数,表示b串在a串中首次出现的位置,若b串未出现在a串中,则输出0; 样式输入:

abcdefghijklmnababcdeabc abc

样式输出:

1

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    int len1,len2,i,j,sum=0,n=0,k;
    char a[100],b[10];
    scanf("%s",a);
    scanf("%s",b);
    len1=strlen(a);
    len2=strlen(b);
    for(i=0;i<len1;i++)
    {
        k=i;//用来恢复i的值。
        for(j=0;j<len2;j++)
        {
            if(a[i]==b[j])
                sum++;//如果相等则加一。
            else break;
            i++;//i要同时加,保持对应比较。
        }
        i=k;
        if(sum==len2)
        {
            printf("%d",i+1);
            n++;//用来记录是否有位置存在。
            break;//有一个位置存在则跳出。
        }
        sum=0;
    }
    if(n==0)
        printf("0");
    return 0;
}  

字符串清理

题目描述: 假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串尾部的号全部删除,前面和中间的号不删除。 *输入描述: 输入为一个字符串,字符串长度小于100;

输出描述描述: 输出为清理后的字符串;

样式输入:

ABCDEFG

样式输出:

**ABCDEFG

源代码

#include<stdio.h>
#include<string.h>
fun(char a[])
{
    int len,i,s;
    len=strlen(a);
    for(i=len-1;i>=0;i--)
        if(a[i]!='*')
        {
            a[i+1]='\0';
            break;
        }
}
int main()
{
    char a[100];
    int i,len;
    scanf("%s",a);
    fun(a);
    len=strlen(a);
    for(i=0;i<len;i++)
        printf("%c",a[i]);
    return 0;
}  

围圈报数游戏

题目描述: 有n(n<=100)围成一圈,顺序排号(从1排到n)。 从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子,此时报数顺序调转,如:11个人围成1圈,从1报到4时,原来4号位的人退出,此时调转顺序报数,原来3号位的人报数1,原来2号位的人报数2,原来1号位的人报数1,原来11号位的人报数4,此时11号位的人退出游戏,再次逆转顺序报数,以此类推,问最后留下的是原来第几号的那位? 输入描述: 输入为两个正整数,第一个<=100,第二个<=9; 输出描述: 输出为一个正整数; 样式输入:

11 4

样式输出:

3

源代码

#include<stdio.h>
int main()
{
    int n,m,i,j,k1=0,k2=0,z1,sum1,sum2,a[101];
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        a[i]=1;
    sum1=n;
    z1=1;
    sum2=0;
    while(sum1!=1)
    {
        for(i=z1;i<=n;i++)
        {
            if(a[i]!=0)
            {
                k1++;
                if(k1==m)
                {
                    a[i]=0;
                    sum1--;
                    if(sum1==1)
                        break;
                    while(sum2==0)
                    {
                        for(j=i-1;j>0;j--)
                            if(a[j]!=0)
                            {
                                k2++;
                                if(k2==m)
                                {
                                    a[j]=0;
                                    sum2++;
                                    sum1--;
                                    k2=0;
                                    break;
                                }
                            }
                        i=n+1;
                    }
                    z1=j;
                    k1=0;
                    sum2=0;
                }
            }
        }
        z1=1;
    }
    for(i=1;i<=n;i++)
        if(a[i]!=0)
            printf("%d",i);
    return 0;
}  

报数游戏

题目描述: 有n(n<=100)围成一圈,顺序排号(从1排到n)。从第一个人开始报数(从1一直往上报数),凡报到m及m的倍数或者尾数为m的人退出圈子,问最后留下的是原来第几号的那位? 输入描述: 输入为两个正整数,第一个<=100,第二个<=9; 输出描述: 输出为一个正整数; 样式输入:

10 3

样式输出:

5

源代码

#include<stdio.h>
int main()
{
    int n,m,i,sum,a[101],k=0;
    scanf("%d%d",&n,&m);
    sum=n;
    for(i=1;i<=n;i++)
        a[i]=1;
    while(sum!=1)
        for(i=1;i<=n;i++)
            if(a[i]!=0)
            {
                k++;
                if(k%m==0)
                {
                    a[i]=0;
                    sum--;
                }
            }
    for(i=1;i<=n;i++)
        if(a[i]!=0)
            printf("%d",i);
    return 0;
}  

整数各位取偶数

题目描述: 将一个整数中的每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 (知识点:控制语句、函数、指针) 输入描述: 输入数据为一个不大于100000000的整形数; 输出描述描述: 输出数据为一个不大于100000000的整形数; 样式输入:

987654321

样式输出:

8642

源代码

#include<stdio.h>
int main()
{
    int s,i,k=0;
    int a[100];
    scanf("%d",&s);
    while(s)
    {
        if((s%10)%2==0)
            a[k++]=s%10;
        s/=10;
    }
    for(i=k-1;i>=0;i--)
        printf("%d",a[i]);
    return 0;
}  

五位反序数

题目描述: 设N是一个五位数,它的n倍恰好是其反序数(例如:123的反序数是321), 编程,输出一个满足条件的N。(知识点:控制语句) 输入描述: 输入为一个整形数n(2<=n<=9) 输出描述描述: 输出为一个五位数的整形数 样式输入:

9

样式输出:

10989

源代码

#include<stdio.h>
int fan(int n)
{
    int law=0,b;
    while(n>0)
    {
        b=n%10;
        law=law*10+b;
        n/=10;
    }
    return law;
}
void main()
{
    int n,N;
    scanf("%d",&n);
    for(N=10000;N<100000;N++)
        if(N*n==fan(N))
        {
            printf("%d",N);
            break;
        }
}

复制字符串

题目描述: 有一个字符串,包括n个字符。写一个函数,将此字符串从第a个字符开始的b个字符复制成另一个字符串。 要求在主函数输入字符串及a,b的值并输出复制结果。 (知识点:控制语句、字符串、指针)

输入描述:输入为一个字符串(长度小于80)及两个整形数(a+b小于字符串的实际长度) 输出描述: 输出为一个字符串 样式输入:

abcdefghijklmnopqrst 8 5

样式输出:

hijkl

源代码

#include<stdio.h>
#include<string.h>
void main()
{
    char a[80],b[80]={0};
    int i,x,y,j;
    gets(a);
    scanf("%d %d",&x,&y);
    for(i=x-1,j=1;j<=y;j++,i++)
        b[j-1]=a[i];
    puts(b);
}  

增加的兔子

题目描述: 古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问一年之内每个月的兔子总数为多少? 输入描述:输出描述描述: 输出一年之中每个月的兔子总数。 样式输入:

样式输出:

1 1 2 3 5 8 13 21 34 55 89 144

源代码

#include<stdio.h>
int main()
{
    int a[12]={1,1},i;
    for(i=2;i<12;i++)
        a[i]=a[i-1]+a[i-2];
    for(i=0;i<11;i++)
        printf("%d ",a[i]);
    printf("%d",a[11]);
    return 0;
}  

整数的分解

题目描述: 将一个正整数分解质因数。例如:输入90,打印出90=2335。 输入描述: 输入一个正整数。 *输出描述描述: 等式左边输出整数,等式右边整数相乘形式。

样式输入:

90

样式输出:

90=2x3x3x5

源代码

#include<stdio.h>
int main()
{
    int a[50],i=2,j,n,sum=0,k=0,b[50]={0},z;
    while(k!=50)
    {
        for(j=1;j<=i;j++)
            if(i%j==0)
                sum++;
        if(sum==2)
        {
            a[k]=i;
            k++;
        }
        sum=0;
        i++;
    }
    scanf("%d",&n);
    k=0;
    z=n;
    while(n!=1)
    {
        for(i=0;i<50;i++)
            if(n%a[i]==0)
            {
                n=n/a[i];
                b[k]=a[i];
                k++;
                break;
            }
    }
    printf("%d=",z);
    for(i=0;i<k-1;i++)
        printf("%d*",b[i]);
    printf("%d",b[k-1]);
    return 0;
}  

小球自由落体问题

题目描述: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 输入描述:输出描述描述: 小球在第10次落地时经过的路程数sn和第10次反弹的高度hn。 样式输入:

样式输出:

the total of road is 299.609375 the tenth is 0.097656 meter

源代码

#include<stdio.h>
int main()
{
    int i;
    double sn,a[11]={100};
    sn=100;
    for(i=2;i<=10;i++)
    {
        a[i-1]=a[i-2]/2.0;
        sn+=2*a[i-1];
    }
    a[10]=a[9]/2.0;
    printf("the total of road is %lf\n",sn);
    printf("the tenth is %lf meter",a[10]);
    return 0;
}  

统计字符

题目描述:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 输入描述: 输入包含英文字母、空格、数字和其他字符的字符串 输出描述: 输出英文字母,空格,数字和其他字符的个数 样式输入:

avc i2g3 &*#4

样式输出:

5,2,3,3 源代码
#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    int len,i,s1=0,s2=0,s3=0,s4=0;
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
            s1++;
        else if(a[i]==' ')
            s2++;
        else if(a[i]<='9' && a[i]>='0')
            s3++;
        else
            s4++;
    }
    printf("%d,%d,%d,%d",s1,s2,s3,s4);
    return 0;
}  
数a求和 题目描述: 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制输入。 输入描述: 输入基数a和需要相加的个数n 输出描述描述: 输出相加的结果,注意结果最后不需要回车换行。 样式输入: 2 5

样式输出:

24690

源代码

#include <stdio.h>
int main()
{
    int i,j,n,a,s,z,w;
    scanf("%d%d",&a,&n);
    for(s=0,i=1;i<=n;i++)
    {
        for(j=1,w=1,z=0;j<=i;j++)
        {
            z+=a*w;
            w*=10;
        }
        s+=z;
    }
    printf("%d",s);
    return 0;
}   

统计单词个数

题目描述: 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。例如,输入:I am a boy,里面包含了四个英文单词。 输入描述: 利用gets输入字符。 输出描述描述: 输出单词个数,程序最后不需要回车换行。 样式输入:

I am a boy

样式输出:

There are 4 words in the line

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    int len,i,b[26]={0},sum=1;
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(a[i]==' ')
            sum++;
    }
    printf("There are %d words in the line",sum);
    return 0;
}  

三角形求最大和的问题

题目描述: 如图所示是一个由数字组成的三角形,编写程序按照某条路线遍历从第一行的首数字到最后一行的某个数,使每一行经过的数字相加的和为最大值,每一次跳转可以向左下方或者右下方进行。例如样图中第一行为7,选择左下方的数字3的话,继续选择左下方的数字8,第四行选择右下方的7,最后到达左下方的数字5。这样,7+3+8+7+5=30为最大。

    7
  3   8
8   1   0

2 7 4 4 4 5 2 6 5 输入描述: 先由键盘输入三角形的行数N(1<N<=100),接下来输入每行的数字,数字取值范围为0~99。 输出描述描述: 输出计算出的数字相加和的最大值。 样式输入:

5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5

样式输出:

30

源代码

#include<stdio.h>
int main()
{
    int a[100][100],i,j,n,max=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        for(j=0;j<=i;j++)
            scanf("%d",&a[i][j]);
    a[1][0]+=a[0][0];
    a[1][1]+=a[0][0];
    for(i=2;i<n;i++)
    {
        a[i][0]+=a[i-1][0];
        for(j=1;j<i;j++)
            a[i][j]+=(a[i-1][j-1]>a[i-1][j])?a[i-1][j-1]:a[i-1][j];
        a[i][j]+=a[i-1][j-1];
    }
    for(i=0;i<n;i++)
        if(a[n-1][i]>max)
            max=a[n-1][i];
    printf("%d",max);
    return 0;
}

节约字节

题目描述: John在做一个项目,项目对存储容量有着近乎苛刻的要求,为此John需要对一些东西进行压缩存储。John的第一个问题就是一大堆的字符串,存储它们太占地方了,为此他想了一个办法:如果字符串具有相同的后缀,那么就把这么字符串的相同后缀和在一起,这样就能节约一点空间了。比如说有三个字符串分别为”john”、”ajohn”和”bjohn”,这样它们有相同的后缀”john”,这时候只需存储一个后缀”john”,节省了8个字母的存储空间。请编写程序计算对于不同的字符串能节省的存储空间? 输入描述: 第一行是一个整数k,表示可以输入多少个测试用例.每个测试用例占n+1行即每个测试用例的第一行为一个整数n(1<=n<=20),从第二行开始依次为n个字符串,字符串由英文字母组成,大小写敏感。 输出描述 一个测试用例输出完毕之后,换行输出这个测试用例节省了多少存储空间。 样式输入

1 3 john ajohn bjohn

样式输出:

save 8 characters

源代码

#include<stdio.h>
#include<string.h>
int main()
{
    int a[20]={0},i,n,k,j,z,m,t,len[20],min;
    char s[20][100];
    scanf("%d",&k);
    while(k)
    {
        i=0;
        scanf("%d",&n);
        z=n;
        while(z)
        {
            scanf("%s",s[i]);
            i++;
            z--;
        }
        for(i=0;i<n;i++)
            len[i]=strlen(s[i]);
        for(j=1;j<n;j++)
        {    
            m=len[0]-1;
            t=len[j]-1;
            while(j)
            {
                if(s[0][m]==s[j][t])
                    a[j]++;
                else
                    break;
                m--;
                t--;
                if(m<0||t<0)
                    break;
            }
        }
        min=a[1];
        for(i=2;i<n;i++)
            if(min>a[i])
                min=a[i];
        min*=n-1;
        printf("save %d characters\n",min);
        k--;
        for(i=1;i<n;i++)
            a[i]=0;
    }
    return 0;
}  

猴子吃桃问题

题目描述: 猴子第一天摘下若干桃子,吃了一半,还不过瘾,又多吃了一个。第二天吃掉剩下桃子的一半,又多吃了一个。以此类推,到第10天时,就只有一个桃子了。问猴子第一天摘下了多少桃子? 输入描述:输出描述描述: 猴子摘下桃子的总数,注意程序最后不需要回车换行。 样式输入:

样式输出:

1534

源代码

#include<stdio.h>
int main()
{
    int i,sum=1;
    for(i=1;i<10;i++)
        sum=(sum+1)*2;
    printf("%d",sum);
    return 0;
}  

2源代码

#include<stdio.h>
int main()
{
    int n,i,sum=1;
    scanf("%d",&n);
    for(i=1;i<n;i++)
        sum=(sum+1)*2;
    printf("%d",sum);
    return 0;
}