致初学者(三): HDU 2033~ 2043题解

下面继续给出HDU 2033~2043的AC程序,供大家参考。2033~2043这10道题就被归结为“ACM程序设计期末考试(2006/06/07) ”和“2005实验班短学期考试 ”。

HDU 2033:人见人爱A+B

简单分支结构。

#include <stdio.h>
int main()
{
    int n,ah,am,as,bh,bm,bs;
    scanf("%d",&n);
    while (n--)
    {
        scanf("%d%d%d%d%d%d",&ah,&am,&as,&bh,&bm,&bs);
        bs+=as;
        if (bs>=60)
        {
            bm+=bs/60;
            bs=bs%60;
        }
        bm+=am;
        if (bm>=60)
        {
            bh+=bm/60;
            bm=bm%60;
        }
        bh+=ah;
        printf("%d %d %d\n",bh,bm,bs);
    }
    return 0;
}

HDU 2034:人见人爱A-B

设用数组a,b,c分别表示集合A,B,C,其中 C=A-B。
      用循环 for (i=0;i<n;i++) 处理集合A中的每个元素a[i],对于元素a[i] 用循环 for (j=0;j<m;j++) 在集合B中查找a[i]是否在集合B中存在,如果a[i]不在集合B中出现,则将a[i]保存到数组c中,作为集合C的一个元素。
      得到数组c后,输出前采用冒泡排序按从小到大的顺序对数组c进行排序。

#include <stdio.h>
int main()
{
    int n,m,i,j,cnt,t;
    int a[101],b[101],c[101];
    while (1)
    {
        scanf("%d%d",&n,&m);
        if (n==0 && m==0)
            break;
        for (i=0;i<n;i++)        // 输入集合A的元素
            scanf("%d",&a[i]);
        for (i=0;i<m;i++)        // 输入集合B的元素
            scanf("%d",&b[i]);
        cnt=0;                  // 集合C=A-B的元素个数
        for (i=0;i<n;i++)
        {
            for (j=0;j<m;j++)  // 查找当前集合A的元素a[i]是否在集合B中存在
                if (a[i]==b[j]) break;
            if (j==m)          // 如果a[i]不在集合B中出现
                c[cnt++]=a[i];
        }
        if (cnt==0)
           printf("NULL\n");
        else
        {
            for (i=0;i<cnt-1;i++) //用冒泡法排序
                for (j=0;j<cnt-1-i;j++)
                    if (c[j]>c[j+1])
                    {
                        t=c[j];
                        c[j]=c[j+1];
                        c[j+1]=t;
                    }
            for (i=0;i<cnt;i++)
            {
                printf("%d ",c[i]);
            }
            printf("\n");
        }
    }
    return 0;
}

HDU 2035:人见人爱A^B

采用快速幂运算完成A^B的计算。

#include <stdio.h>
int mod_pow(int x,int n,int m)  // 快速幂运算
{
    int ret=1;
    while (n!=0)
    {
        if (n&1) ret=ret*x%m;
        x=x*x%m;
        n/=2;
    }
    return ret;
}
int main()
{
    int a,b;
    while (1)
    {
        scanf("%d%d",&a,&b);
        if (a==0 && b==0) break;
        printf("%d\n",mod_pow(a,b,1000));
    }
    return 0;
}

HDU 2036:改革春风吹满地

HDU 2037:今年暑假不AC

定义一个结构体
      struct showtime
      {
           int begin;
           int end;
      };
用于保存电视节目的开始时间和结束时间。定义结构体数组show[101]保存输入的电视节目情况。
      采用贪心法求解。将电视节目(即结构体数组show)按结束时间从小到大排列(若结束时间系统,则按开始时间从大到小)。
      先设lastend=show[0].end,因为第1个元素的结束时间一定是最早的,然后从左到右遍历数组各元素,若当前元素的开始时间大于lastend,则可以看一个完整节目,计数,同时修改lastend使之等于当前元素的结束时间。直到数组全部元素遍历完。

#include <stdio.h>
#include <algorithm>
using namespace std;
struct showtime
{
    int begin;
    int end;
};
bool cmp(showtime a ,showtime b)
{
    if(a.end != b.end)
        return a.end < b.end;
    else
        return a.begin > b.begin;
}
int main()
{
    showtime show[101];
    int n,i,cnt,lastend;
    while (scanf("%d",&n) && n!=0)
    {
        for (i = 0;i<n;i++)
        {
            scanf("%d%d",&show[i].begin,&show[i].end);
        }
        sort(show,show+n,cmp);
        cnt = 1;
        lastend = show[0].end;
        for (i = 0;i < n ;i++)
        {
            if(lastend <= show[i].begin)
            {
                cnt++;
                lastend = show[i].end;
            }
        }
        printf("%d\n",cnt);
    }
    return 0;
}

HDU 2039:三角形

简单分支结构。输入三角形三条边后,若满足任意两边的和大于第3条边,则可以构成一个三角形。

#include <stdio.h>
int main()
{
    int m;
    double a,b,c;
    scanf("%d",&m);
    while (m--)
    {
        scanf("%lf%lf%lf",&a,&b,&c);
        if (a+b>c && a+c>b && b+c>a)
           printf("YES\n");
        else
           printf("NO\n");
    }
    return 0;
}

HDU 2040:亲和数

抽象一个函数 int calcSum(int n)用于计算整数n的所有真因子之和。

#include <stdio.h>
#include <math.h>
int calcSum(int n)
{
    int sum=1,i,t;
    t=(int)sqrt(1.0*n);
    for (i=2;i<=t;i++)
        if (n%i==0)
            sum+=i+n/i;
    return sum;
}
int main()
{
    int m,a,b;
    scanf("%d",&m);
    while (m--)
    {
        scanf("%d%d",&a,&b);
        if (calcSum(a)==b && calcSum(b)==a)
           printf("YES\n");
        else
           printf("NO\n");
    }
    return 0;
}

HDU 2041:超级楼梯

设 f[i]表示上到第i级楼梯的方法数。显然上到第i级,可以在第i-1级楼梯跨1级到达;或者在第i-2级楼梯跨2级到达。
      故有 f[i]=f[i-1]+f[i-2]。

#include <stdio.h>
int main()
{
    int n,m,i;
    int f[41]={0,1,1};
    for (i=3;i<=40;i++)
        f[i]=f[i-1]+f[i-2];
    scanf("%d",&n);
    while (n--)
    {
        scanf("%d",&m);
        printf("%d\n",f[m]);
    }
    return 0;
}

HDU 2042:不容易系列之二

简单迭代处理。迭代初值num=3,迭代式为: num=2*(num-1); 。

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

HDU 2043:密码

简单字符串处理。

#include <stdio.h>
#include <string.h>
int main()
{
    int m,i,f1,f2,f3,f4;
    char str[51];
    scanf("%d",&m);
    while (m--)
    {
        scanf("%s",str);
        if (strlen(str)<8 || strlen(str)>16)
           printf("NO\n");
        else
        {
            f1=f2=f3=f4=0;
            for (i=0;str[i]!=‘\0‘;i++)
                if (str[i]>=‘0‘ && str[i]<=‘9‘)
                    f3=1;
                else if (str[i]>=‘A‘ && str[i]<=‘Z‘)
                    f1=1;
                else if (str[i]>=‘a‘ && str[i]<=‘z‘)
                    f2=1;
                else
                    f4=1;
            if (f1+f2+f3+f4>=3)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/cs-whut/p/11525355.html

时间: 2024-10-14 04:46:11

致初学者(三): HDU 2033~ 2043题解的相关文章

HDU 1015 Safecracker 题解

Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein safe behind a painting in the second-floor library. Klein safes are extremely rare; most of them, along with Klein and his factory, were destroyed in Wo

爆零后的感受外加一道强联通分量HDU 4635的题解

今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句"",弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly connected)题,这么短的题目,肯定要先看啦.然后D(LightOJ 1229),然后C(ZOJ 2243),然后F(HDU 4711),然后B(CodeForces 385D),然后看A(HDU 3889)好吧,我承认,A题看了一眼就不看了,B题一看是线段什么有点几何的味道就果断

HDU 1425 sort 题解

选择出数列中前k个最大的数. 这里因为数据特殊,所以可以使用hash表的方法: #include <cstdio> #include <algorithm> #include <stdlib.h> #include <limits> using namespace std; const int SIZE = 1000005; const int SMALL = -500000; bool arr[SIZE]; int main() { int n, m, a

hdu 2033 人见人爱A+B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2033 题目大意:类似于a+b,只不过换成了时间的加减,超过60减去,然后在相应的分和时加一!没有太大的格式要求~ 1 #include <stdio.h> 2 int main () 3 { 4 int AH,AM,AS,BH,BM,BS,H,M,S,N; 5 scanf ("%d",&N); 6 while (N--) 7 { 8 H=M=S=0; 9 scanf(&

致初学者OIer与《A+B》,《 超级玛丽游戏》

致初学OIer: 你想知道的9个问题 不同于数理化生这些科目, 大部分人可能都是第一次接触"信竞"这个科目. 你对这个科目可能一无所知. 不过没关系, 笔者这里将解答你的疑问. 1. 什么是编程? 我们的计算机上运行这各式各样的程序, 这些程序承担着各种功能. 正如字面意思, "编程"就是"编写程序" 我们将对计算机下达一个"指令清单", 称作源代码. 不过计算机并不能直接"读懂"这些源代码, 因为源代码是

9.27考试 SD_le NOIP模拟题 第三题 建造游乐场题解

这道题当时没读完题时脑部了无数种问法,然而最后还是猝不及防.一开始还以为是结论题,然而死也退不出来,就先去打第二题了.然后在想这道题时,我想到的是这样的思路(由于当时时间紧迫,尚未完善): 我每次向图中增加两个点,那么这两个点对于所有入度为偶数的点是否连接一定是一致的,如果这两个点相连,那么如果使他们分别和一个入度为单数的点相连,那么他们就是新的入度为单数的点,其他情况就不叙述了,太多了.还不是正解. 由于最后时间太紧迫了,我不得不打暴力去保分,结果还好丢人好丢人的打错了-- 正解其实还是挺有意

HDU 1106 排序 题解

排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 38192    Accepted Submission(s): 10819 Problem Description 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由

HDU Computer Transformation1041 题解

Problem Description A sequence consisting of one digit, the number 1 is initially written into a computer. At each successive time step, the computer simultaneously tranforms each digit 0 into the sequence 1 0 and each digit 1 into the sequence 0 1.

第三周训练赛题解

这次题目加强了搜索的练习,还有一些小技巧和基本方法,加了一道基础DP居然没人A确实是意料之外,C题的裸DFS也是很迷.蓝桥杯以爆搜为主,近期会加强搜索训练,做好准备. A: 给定一个整数n,将1~n排列成环使两两之间互质. DFS搜索所有可能的排列,输出. B: 问能否在恰好的时间从S->D 题目运用到了奇偶剪枝的方法, 根据题目,doggie必须在第t秒到达门口.也就是需要走t-1步.设doggie开始的位置为(sx,sy),目标位置为(ex,ey).如果abs(ex-x)+abs(ey-y)