• 杭电oj平台上的11页题目代码:hdu-page11 (2050~2059)2053、2054、2055、2056、2058、2059


    //2050
    /*思路:1.先分析直线分割平面的情况,增加第n条直线的时候,跟之前的直线最多有(n-1)个交点,此时分出的部分多了(n-1)+1个,故递推公式是f[n]=f[n-1]+(n-1)+1;
    2.同理分析折线分割平面的情况,增加第n-1条折线的时候,跟之前的n-1条折线最多有2*2(n-1)个交点,此时分出的部分多了2*2(n-1)+1个;
    故推出f[n]=f[n-1]+4(n-1)+1.*/
    #include<stdio.h>
    #include<string.h>
    #define MAXN 10001//数组大小刚开始设置为1001,就出现超时错误了,改成10001就AC了
    typedef long long ll;
    ll f[MAXN];//用来记录不同的n的所分割的平面数
    int main()
    {
    int c;
    int i;
    int n;
    f[1] = 2;
    f[2] = 7;
    scanf("%d", &c);
    while (c--)
    {
    scanf("%d", &n);
    for (i = 3; i <= n; i++)
    {
    f[i] = f[i - 1] + 4 * (i - 1) + 1;
    }
    printf("%lld ", f[n]);
    }
    return 0;
    }


    //2051
    #include<stdio.h>
    #include<string.h>
    #define MAXN 1001
    int f[MAXN];
    int main()
    {
    int n;
    int len;
    while (~scanf("%d",&n))
    {
    len = 0;
    while (n)
    {
    f[len++] = n % 2;
    n /= 2;
    }
    //倒着输出
    for (int i = len-1; i >= 0; i--)
    {
    printf("%d", f[i]);
    }
    printf(" ");
    }
    return 0;
    }

    //2052
    #include<stdio.h>
    #include<string.h>
    #define MAXN 1001
    int f[MAXN];
    int main()
    {
    int n;
    int m;
    int i;
    int j;
    int k;
    while (~scanf("%d%d",&n,&m))
    {
    //先打印第一行
    printf("+");
    for ( i = 0; i < n; i++)
    {
    printf("-");
    }
    printf("+ ");
    //共有m行
    for ( k = 0; k < m; k++)
    {
    //第二行
    printf("|");
    //接着打印n个空格
    for ( j = 0; j < n; j++)
    {
    printf(" ");
    }
    printf("|");

    printf(" ");
    }
    //最后一行
    printf("+");
    for (i = 0; i < n; i++)
    {
    printf("-");
    }
    printf("+ ");

    }
    return 0;
    }

    //2053
    //思路:
    #include<stdio.h>
    #include<string.h>
    #define MAXN 1001
    int f[MAXN];
    int main()
    {
    int n;
    int i;
    int j;
    int count;
    while (~scanf("%d",&n))
    {
    count = 0;
    for (int i = 1; i <= n; i++)
    {
    if (n%i==0)
    {
    count++;
    }
    }
    if (count%2==0)
    {
    printf("0 ");

    }
    else
    {
    printf("1 ");
    }
    }

    return 0;
    }

    //2054
    /**/
    #include<stdio.h>
    #include<string.h>
    #define N 1000000
    char str1[N], str2[N];
    int havePoint(char str[])
    {
    int i, len;
    len = strlen(str);
    for ( i = 0; i < len; i++)
    {
    if (str[i] == '.')
    return 1;
    }
    return 0;
    }

    void change(char str[])
    {
    int i, len;
    len = strlen(str);
    if (havePoint(str))
    {
    for ( i = len-1; str[i]=='0'; i--)
    {
    str[i] = '';
    len--;
    }
    if (str[len-1]=='.')
    {
    str[len - 1] = '';
    }
    }
    }

    int main()
    {
    while (~scanf("%s %s",str1,str2))
    {
    change(str1);
    change(str2);
    if (strcmp(str1,str2)==0)
    {
    printf("YES ");
    }
    else
    {
    printf("NO ");
    }
    }
    return 0;
    }

    //2055
    //思路:将数字和字母对应起来,a-z:97-122;A-Z:65-90;0-9:48-57
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    int t;
    scanf("%d", &t);
    getchar();
    int y;
    char c;
    int sum;
    while (t--)
    {
    sum = 0;
    //因为读入的是字符,所以前面需要getchar(),不加getchar()的话就wa了
    scanf("%c%d", &c, &y);
    if (c>='a'&&c<='z')
    {
    ////如果c是‘A’,则(int)(c - 'a' + 1)=1,前面加个负号是f[a]对应的值-1
    sum = y -(int)( c - 'a' + 1);
    printf("%d ", sum);
    }
    else if (c >= 'A'&&c <= 'Z')
    {
    //如果c是‘A’,则(int)(c - 'A' + 1)=1,刚好是f[A]对应的值1
    sum = y + (int)(c - 'A' + 1);
    printf("%d ", sum);
    }
    getchar();
    }
    return 0;
    }


    //2056
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    double x[5];
    double y[5];
    using namespace std;
    int main()
    {
    double x1, y1, x2, y2, x3, y3, x4, y4;
    double l, h;
    double s;
    while (~scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4))
    {
    x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4;
    y[0] = y1; y[1] = y2; y[2] = y3; y[3] = y4;
    sort(x, x + 4);
    sort(y, y + 4);
    l = fabs(x2 - x1) + fabs(x4 - x3) - (x[3]-x[0]);
    h = fabs(y2 - y1) + fabs(y4 - y3) - (y[3] - y[0]);
    s = l*h;
    if (l<=0||h<=0)
    {
    s = 0.00;
    }
    printf("%.2lf ", s);
    }

    return 0;
    }

    //2057
    //思路:题目的意思是十六进制的加减,基本的思想:将其先转换为十进制,进行相加减后,再将结果(十进制)转换为十六进制
    //用计算机组成原理中的方法,就是先将其转换为(二进制)补码,再进行相加得到结果
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    typedef long long ll;
    using namespace std;
    int main()
    {
    ll a, b, result;
    //%llx是代表16进制
    while (~scanf("%llx %llx",&a,&b))
    {
    result = a + b;
    if (result >= 0)
    {
    printf("%llX ", result);
    }
    else
    {
    printf("-%llX ", -result);
    }
    }
    return 0;

    }

    //2058
    /*思路:设子序列(sub-sequence)是分别a+1,a+2,a+3,....;d是子序列的长度;
    m=sum=a*d+(1+d)*d/2;得出m*2>(1+d)*d.
    a*d=m-(d+d*d)/2;
    */
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int main()
    {
    int n, m;
    int d;
    int b;
    while (~scanf("%d%d",&n,&m))
    {
    if (n==0&&m==0)
    {
    break;
    }
    //按照实际情况d不能等于0
    for (d = sqrt(2.0*m); d >0; d--)
    {
    //b代表a*d,从后向前遍历得到合适的d
    b = m - (d + d*d) / 2;
    if (b%d==0)
    {
    printf("[%d,%d] ",b/d+1,b/d+d);
    }
    }
    printf(" ");
    }
    return 0;
    }

    //2059
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #define MAXN 101
    int p[MAXN];
    #define MAXN_DP 1001
    double dp[MAXN_DP];
    using namespace std;
    int main()
    {
    int L;
    int N, C, T;
    int VR, VT1, VT2;
    int i,j;
    double tr, time;
    while (~scanf("%d",&L))
    {
    //N代表充电站的个数,C代表电动车充满电以后能行驶的距离,T代表每次充电所需要的时间
    scanf("%d%d%d", &N, &C, &T);
    //VR表示兔子跑步的速度,VT1表示乌龟开电动车的速度,VT2代表乌龟脚蹬电动车的速度
    scanf("%d%d%d", &VR, &VT1, &VT2);
    //N个整数p1,p2,,,,pn分别表示各个充电站离跑道起点的距离
    for ( i = 1; i <= N; i++)
    {
    scanf("%d", &p[i]);
    }

    p[N + 1] = L;
    dp[0] = 0;
    tr = L*1.0 / VR;
    for ( i = 1; i <= N+1; i++)
    {
    double Min = 99999999;
    for ( j = 0; j < i; j++)
    {
    int x = p[i] - p[j];
    if (C>= x)
    {
    time = x*1.0 / VT1;
    }
    else
    {
    time = C*1.0 / VT1 + (x - C)*1.0 / VT2;
    }
    if (j)
    {
    time += T;
    }
    if (Min>dp[j]+time)
    {
    Min = dp[j] + time;
    }
    }
    dp[i] = Min;
    }
    if (dp[N+1]>tr)
    {
    printf("Good job,rabbit! ");
    }
    else
    {
    printf("What a pity rabbit! ");
    }
    }


    return 0;
    }

    一生有所追!
  • 相关阅读:
    echarts 柱状图移除圆角
    echarts 图例显示到右边
    css图片文字一排
    linux磁盘分区、挂载、查看
    mysql的sql筛选排重最大值并修改其属性
    Java调用Linux下的shell命令并将结果以流的形式返回
    SHELL脚本中执行SQL语句操作MYSQL的5种方法
    在 Mac 上使用 `sed` 命令的几个坑
    Linux sed命令实现替换文本内容
    docker ps -a
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8597531.html
Copyright © 2020-2023  润新知