c语言网 1431.1471.1482.1434

c语言网的简单题一点都不简单,记录令人抓狂的题目......

1431.分糖果

题目描述

有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

每个小朋友都把自己的糖果分一半给左手边的孩子。一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

输入

程序首先读入一个整数N(2< N< 100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2) 

输出

要求程序输出一个整数,表示老师需要补发的糖果数。

样例输入

3 
2 2 4 

样例输出

4

 不明白为什么第一个for位置上写if(a[i]!=a[i+1]) 就死循环了,为嘛呀?????

我不李姐(  ??)

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int a[100100];
    for(int i=1;i<=n;i++)
        cin>>a[i];
    int sum=0;
    while(1)
    {
        bool flag=true;
        for(int i=1;i<=n;i++)
            if(a[1]!=a[i]) flag=false;

        if(flag==true) break;
        else
        {
            int t=a[1];
            for(int i=1;i<=n;i++)
            {
                if(i==n) a[n]=a[n]/2+t/2;
                else a[i]=a[i]/2+a[i+1]/2;
            }
            for(int i=1;i<=n;i++)
                if(a[i]%2==1) { a[i]++; sum++; }
        }
    }
    cout<<sum<<endl;
    return 0;
}

1471.矩形面积交

题目描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入

输入仅包含两行,每行描述一个矩形。 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出      输出仅包含一个实数,为交的面积,保留到小数后两位。 

样例输入复制

1 1 3 3 
2 2 4 4 

样例输出复制

1.00
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    double x1,x2,x3,x4,y1,y2,y3,y4;
    cin>>x1>>y1>>x2>>y2;
    cin>>x3>>y3>>x4>>y4;
    double ax=max(min(x1,x2),min(x3,x4));
    double ay=max(min(y1,y2),min(y3,y4));
    double bx=min(max(x1,x2),max(x3,x4));
    double by=min(max(y1,y2),max(y3,y4));
    if(bx<=ax) cout<<"0.00"<<endl;
    else printf("%.2lf\n",fabs(bx-ax)*fabs(by-ay));
    return 0;
}

 1482.Pascal三角

wa了一片 (被个杨辉三角的格式卡了两天,怒锤键盘)   lqb会卡格式卡这么严格吗?

样例输入复制

3

样例输出复制

           1   
        1     1   
     1     2     1   
  1     3     3     1   
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int a[100][100];
    for(int i=0;i<=n;i++)
    {
        a[i][0]=1;
    }
    a[1][1]=1;
    for(int i=2;i<=n;i++)
        for(int j=1;j<i;j++)
        {
            a[i][j]=a[i-1][j-1]+a[i-1][j];
            a[i][i]=1;
        }
    int t=n;
    for(int i=0;i<=n;i++)
    {
        for(int k=t--;k>0;k--)
            printf("   ");
        for(int j=0;j<=i;j++)
            printf("%3d   ",a[i][j]);
        printf("\n");
    }
    return 0;
}

 1434.回文数字

题目描述

本题要求你找到一些5位或6位的十进制数字。满足1.该数字的各个数位之和等于输入的整数,2.是回文数字 
如果没有满足条件的,输出:-1 

样例输入复制

44 

样例输出复制

99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499

学到了一个很巧妙的写法欸! 

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    bool flag=false;
    for(int i=10000;i<=999999;i++)//eg 12345
    {
        int t=i,num=0,sum=0;
        while(t>0)
        {
            num=num*10+t%10;//倒序相乘      5 54 543 5432 54321
            sum+=t%10;//从末位数字依次相加  5+4+3+2+1
            t/=10;//                      5 4  3  2 1
        }
        if(num==i&&sum==n)//如果是回文数字而且各个位数相加等于n
        {
            flag=true;
            cout<<i<<endl;
        }
    }
    if(flag==false) printf("-1\n");
    return 0;
}

下午该把概率论第一章完结了 ,*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

晚上再接着补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vijurria

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值