openjudge 计算概论基础编程练习(控制成分)

8:最长平台
总时间限制: 1000ms 内存限制: 65536kB
描述
已知一个已经从小到大排序的数组,这个数组的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在 1,2,2,3,3,3,4,5,5,6中1,2-2,3-3-3,4,5-5,6都是平台。试编写一个程序,接收一个数组,把这个数组最长的平台找出 来。在上面的例子中3-3-3就是最长的平台。


输入
第一行有一个整数n,为数组元素的个数(若n=0,表示测试数据结尾。)
输出
输出最长平台的长度。
样例输入
10
1 2 2 3 3 3 4 5 5 6
5
1 1 1 2 7
0
样例输出
3

3

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
    int n,count,max,p[N],j,i;
    do
    {
        scanf("%d",&n);
        count=1;
        max=1;
        for(i=0; i<n; i++)
            scanf("%d",&p[i]);
        for(i=1; i<n; i++)
        {
            if(p[i]==p[i-1])
            {
                count++;
                if(max<count)  //每次都要更新max
                    max=count;
            }
            else
                count=1;   //表示重新计数
        }
        if(n!=0) printf("%d\n",max);
    }
    while(n!=0);
    return 0;
}



6:称体重
总时间限制: 1000ms 内存限制: 65536kB
描述
赵、钱、孙、李四个人中既有大人也有小孩,给他们称体重时发现,他们每个人的体重都不一样,且体重(单位:公斤)恰好是10的整数倍,且他们的体重都不高 于50公斤,已知赵、钱两人的体重之和恰好等于孙、李两人的体重之和; 赵、李两人的体重之和大于孙、钱两人的体重之和,并且赵、孙俩人的体重之和还小于钱的体重。请编写一个程序,按照由大到小的顺序,打印出四人的姓氏的首字 母和体重数(中间用空格隔开,每人一行)。


输入

输出
打印出四人的姓氏的首字母和体重数(中间用空格隔开,每人一行)。
样例输入

样例输出
z 10
q 20
s 30
l 40
(以上输出仅用于说明格式)


#include <stdio.h>
#include <stdlib.h>


int main()
{
    int z,q,s,l;
    for(z=10;z<51;z+=10)        //穷举
        for(q=10;q<51;q+=10)
        for(s=10;s<51;s+=10)
         for(l=10;l<51;l+=10)
    {
        if(((z+q)==(s+l))&&((z+l)>(s+q))&&((z+s)<q))
            printf("l %d\nq %d\nz %d\ns %d",l,q,z,s);
    }
    return 0;
}



4:完美立方
总时间限制: 1000ms 内存限制: 65536kB
描述
a的立方 = b的立方 + c的立方 + d的立方为完美立方等式。例如12的立方 = 6的立方 + 8的立方 + 10的立方 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a的立方 = b的立方 + c的立方 + d的立方,其中a,b,c,d 大于 1, 小于等于N。
输入
正整数N (N≤100)
输出
每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。
样例输入
24
样例输出
Cube = 6, Triple = (3,4,5) 
Cube = 12, Triple = (6,8,10) 
Cube = 18, Triple = (2,12,16) 
Cube = 18, Triple = (9,12,15) 
Cube = 19, Triple = (3,10,18) 
Cube = 20, Triple = (7,14,17) 
Cube = 24, Triple = (12,16,20) 
来源
1543


#include <stdio.h>
#include <stdlib.h>


int main()
{
    int a,b,c,d,N;
    scanf("%d",&N);
     for(a=2;a<=N;a++)
        for(b=2;b<=N;b++)
        for(c=b;c<=N;c++)
            for(d=c;d<=N;d++)
    {
        if(a*a*a==b*b*b+c*c*c+d*d*d)
            printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
    }
    return 0;
}


5:求特殊自然数
总时间限制: 1000ms 内存限制: 65536kB
描述
一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示. 


输入为1时,输出此自然数的十进制表达式;输入为2时,输出此自然数的七进制表达式;输入为3时,输出此自然数的九进制表达式。


输入
输入为1,2,3中的一个数。
输出
输出一行。
输出为十进制或七进制或九进制数
样例输入
1
样例输出
(特殊题目,不显示样例输出)


#include <stdio.h>
#include <stdlib.h>
#define digits 3
int main()
{
    int ten ,seven[digits]= {},nine[digits]= {},temp1,temp2, count,i,n;
    for(ten=1; ten<1000; ten++)
    {
        count=0;
        temp1=ten;
        temp2=ten;
        do
        {
            seven[count]=temp1%7;
            temp1=temp1/7;
            nine[count]=temp2%9;
            temp2=temp2/9;
            count++;
            if(count>2)           //  题目限定为三位数
                break;
        }
        while(temp1!=0||temp2!=0);
        if(nine[2]==seven[0]&&nine[1]==seven[1]&&nine[0]==seven[2])    //判断倒序是否相等
        {
            scanf("%d",&n);
            switch(n)
            {
            case 1:
                printf("%d\n",ten);
                break;
            case 2:
                printf("%d%d%d\n",seven[2],seven[1],seven[0]);
                break;
            case 3:
                printf("%d%d%d\n",nine[2],nine[1],nine[0]);
                break;
            }
        }
    }
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值