day3:选拔赛2

day3:选拔赛2

B题:hdu 1114:Piggy-Bank

开始就觉得是贪心就行,原来就是一道完全背包的裸题啊,明天再去补补吧,不然上午估计得起不来了

E题:hdu 1237:简单计算器

一道水题,但是还是WA了一发,因为没有考虑到,第一个数是0,但是并不是表示结束标识,感觉这道题如果不是老师前两天提过一下,还不会这么快有思路,直接用个即可,但是就是有空格需要处理

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<stack>
#include<cmath>
using namespace std;
int main()
{
    double num;
    char ch;
    while(~scanf("%lf",&num))
    {
        stack<double>sta;
        ch=getchar();
        if(num==0&&ch=='\n')
            break;
        sta.push(num);
        scanf("%c",&ch);
        getchar();
        double x;
        while(~scanf("%lf",&num))
        {
            if(ch=='*')
            {
                x=sta.top();
                sta.pop();
                num=num*x;
                sta.push(num);
            }
            else if(ch=='/')
            {
                x=sta.top();
                sta.pop();
                num=x/num;
                sta.push(num);
            }
            else if(ch=='+')
            {
                sta.push(num);
            }
            else if(ch=='-')
            {
                num=0-num;
                sta.push(num);
            }
            if(getchar()=='\n')
                break;
            ch=getchar();
        }
        num=0;
        while(!sta.empty())
        {
            num+=sta.top();
            sta.pop();
        }
        printf("%.2lf\n",num);
    }
    return 0;
}

F题:poj 2586:Y2K Accounting Bug

感觉应该不难,但是居然题目都没看懂是啥意思
明天一定得补了

G题:hdu 1715:大菲波数

显然会爆long long 于是直接用字符串存即可,可惜还是出了点问题,没考虑最后一位进位相加,导致WA了一发

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
char str[1010][100010];
char s[100010];
void fx(char s1[],char s2[],int i)
{
    int len1=strlen(s1);
    int len2=strlen(s2);
    int num;
    int bit=0;
    int t=0;
    while(len1>0&&len2>0)
    {
        num=(s1[len1-1]-'0')+(s2[len2-1]-'0')+bit;
        bit=num/10;
        num=num%10;
        s[t++]=num+'0';
        len1--;
        len2--;
    }
    if(len1>0)
    {
        while(len1>0)
        {
            num=s1[len1-1]-'0'+bit;
            bit=num/10;
            num=num%10;
            s[t++]=num+'0';
            len1--;
        }
    }
    else if(len2>0)
    {
        while(len2>0)
        {
            num=s2[len2-1]-'0'+bit;
            bit=num/10;
            num%=10;
            s[t++]=num+'0';
            len2--;
        }
    }
    if(bit!=0)
        s[t++]=bit+'0';
    s[t]='\0';
    int m=0;
    for(int j=t-1;j>=0;j--)
    {
        str[i][m++]=s[j];
    }
    str[i][m]='\0';
}
int main()
{
    strcpy(str[1],"1");
    strcpy(str[2],"1");
    for(int i=3;i<=1000;i++)
    {
        fx(str[i-1],str[i-2],i);
    }
    int t;
    int n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%s\n",str[n]);
    }
    return 0;
}

I题:hdu 1106:排序

一道可以说是模拟题,但是也不算是模拟题,其实顺着题意来,就还是很简单的,但是又是考虑不周全,导致没一发A,案例给的是字符串最后一个字符是5,但是如果不是5的话,还是要把最后一个数算上的啊,这20分钟还是罚的冤

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
char str[1010];
char s[1010];
int num[10010];
int main()
{
    while(~scanf("%s",str))
    {
        memset(num,0,sizeof(num));
        int t=0;
        int cnt=0;
        int len=strlen(str);
        for(int i=0; i<len; i++)
        {
            if(str[i]=='5')
            {
                if(t==0)
                    continue;
                s[t]='\0';
                t=0;
                int len1=strlen(s);
                int flag=0;
                int sum=0;
                int x=0;
                for(int j=0; j<len1; j++)
                {
                    if(s[j]=='0'&&flag==0)
                    {
                        continue;
                    }
                    else
                    {
                        flag=1;
                        x=(s[j]-'0');
                        for(int k=0; k<len1-j-1; k++)
                            x*=10;
                        sum+=x;
                    }
                }
                if(flag==0)
                    num[cnt++]=0;
                else
                    num[cnt++]=sum;
            }
            else
            {
                s[t++]=str[i];
            }
        }
        if(t!=0)
        {
            s[t]='\0';
            t=0;
            int len1=strlen(s);
            int flag=0;
            int sum=0;
            int x=0;
            for(int j=0; j<len1; j++)
            {
                if(s[j]=='0'&&flag==0)
                {
                    continue;
                }
                else
                {
                    flag=1;
                    x=(s[j]-'0');
                    for(int k=0; k<len1-j-1; k++)
                        x*=10;
                    sum+=x;
                }
            }
            if(flag==0)
                num[cnt++]=0;
            else
                num[cnt++]=sum;
        }
        sort(num,num+cnt);
        for(int i=0; i<cnt; i++)
        {
            if(i==0)
                printf("%d",num[i]);
            else
                printf(" %d",num[i]);
        }
        printf("\n");
    }
    return 0;
}

J题:hdu 1984:Mispelling4

大水题

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
    int t;
    int n;
    char str[100];
    char s[100];
    scanf("%d",&t);
    for(int j=0;j<t;j++)
    {
        scanf("%d",&n);
        scanf("%s",str);
        int len=strlen(str);
        int m=0;
        for(int i=0;i<len;i++)
        {
            if(i==n-1)
                continue;
            else
                s[m++]=str[i];
        }
        s[m]='\0';
        printf("%d %s\n",j+1,s);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值