编程疑难杂症

 1 排序字符串,按 字符与 'U'的距离

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>

using namespace std;
const int N = 10005;

char s[N];
struct PP
{
    int p;
    int v;
    int flag;
}a[N];

bool cmp(PP x,PP y) {
    if(x.v == y.v) {
        return x.p < y.p;
    }
    else{
        return x.v < y.v;
    }
}

int main()
{
    freopen("in.txt","r",stdin);
    while(scanf("%s",s) != EOF) {
        int l = strlen(s);
        int i;
        for(i = 0;i < l;i++) {
            a[i].p = i;
            if(s[i] < 'U') {
                a[i].v = 'U' - s[i];
                a[i].flag = -1;
            }
            else{
                a[i].v = s[i] - 'U';
                a[i].flag = 1;
            }
        }
        sort(a,a + l,cmp);
        for(i = 0;i < l;i++) {
            if(a[i].flag == -1) {
                printf("%c",'U' - a[i].v);
            }
            else{
                printf("%c",'U' + a[i].v);
            }
        }
        printf("\n");
    }
    return 0;
}

2 求某个时间的下一秒

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>

using namespace std;
const int N = 10005;

struct date
{
    int year;
    int month;
    int day;
    int hour;
    int mi;
    int sec;
}now,nt;

int m[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int isrun(int y)
{
    if(y % 400 == 0) return 1;
    if(y % 100 == 0) return 0;
    if(y % 4 == 0) return 1;
    return 0;
}

void fun()
{
    int flag = isrun(nt.year);
    if(flag == 1) {
        m[2] = 29;
    }
    else{
        m[2] = 28;
    }
    if(nt.day > m[ nt.month ]) {
        nt.day = 1;
        nt.month++;
        if(nt.month == 13) {
            nt.month = 1;
            nt.year++;
        }
    }
}

int main()
{
    freopen("in.txt","r",stdin);
    while(scanf("%d/%d/%d %d:%d:%d",&now.year,&now.month,&now.day,&now.hour,&now.mi,&now.sec) != EOF) {
        nt = now;
        nt.sec ++;
        if(nt.sec == 60) {
            nt.sec = 0;
            nt.mi++;
            if(nt.mi == 60) {
                nt.mi = 0;
                nt.hour++;
                if(nt.hour == 24) {
                    nt.hour = 0;
                    nt.day++;
                    fun();
                }
            }
        }
        printf("%04d/%02d/%02d %02d:%02d:%02d\n",nt.year,nt.month,nt.day,nt.hour,nt.mi,nt.sec);
    }
    return 0;
}
3 求一个数组的最大 和 次大值

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <cctype>
#include <vector>
#include <cmath>
#include <map>
#include <queue>

#define ll long long
#define eps 1e-8
#define N 1005
#define inf 0x7fffffff

using namespace std;

struct shangpin
{
    char name[5];
    int value;
    int cou;
}S[5];

struct money
{
    int v;
    int cou;
}M[7];

int total;

void ini()
{
    //S[1].name == "A1";
    S[1].value = 2;S[1].cou = 5;
    //S[2].name == "A2";
    S[2].value = 3;S[2].cou = 10;
    //S[3].name == "A3";
    S[3].value = 4;S[3].cou = 14;

    M[1].v = 1;M[1].cou = 5;
    M[2].v = 2;M[2].cou = 5;
    M[5].v = 5;M[5].cou = 3;

    total = 0;
}

void out()
{
    printf("A1 %d,A2 %d,A3 %d;",S[1].cou,S[2].cou,S[3].cou);
    printf("1 %d,2 %d,5 %d\n",M[1].cou,M[2].cou,M[5].cou);
}

void change()
{
    int c5,c2,c1;
    c5 = total / 5;
    if(M[5].cou >= c5) {
        M[5].cou -= c5;
        total -= c5 * 5;
    }
    else{
        total -= M[5].cou * 5;
        M[5].cou = 0;
    }


    c2 = total / 2;

    if(M[2].cou >= c2) {
        M[2].cou -= c2;
        total -= c2 * 2;
    }
    else{
        total -= M[2].cou * 2;
        M[2].cou = 0;
    }

    M[1].cou -= total;
}

int main()
{
    //freopen("in.txt","r",stdin);
    ini();
    //out();
    char s[3];
    int mm;
    int nn;
    //scanf("%d",&T);
    //for(int ccnt=1;ccnt<=T;ccnt++){
    while(scanf("%s",s) != EOF){
        //printf("%s\n",s);
        if(s[0] == 'p') {
            scanf("%d,",&mm);
            total += mm;
            if(mm == 1) {
                M[1].cou++;
            }
            else if(mm == 2){
                M[2].cou++;
            }
            else{
                M[5].cou++;
            }
        }
        else{
            getchar();
            scanf("A%d,",&nn);
            //printf("  nn = %d\n",nn);
            //getchar();
            if(nn == 1) {
                S[1].cou--;
                total -= S[1].value;
            }
            else if(nn == 2) {
                S[2].cou--;
                total -= S[2].value;
            }
            else{
                S[3].cou--;
                total -= S[3].value;
            }
        }
    }
    change();
    out();
    return 0;
}
 某个bfs,已经记不得了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <cctype>
#include <vector>
#include <cmath>
#include <map>
#include <queue>

#define ll long long
#define eps 1e-8
#define N 100005
#define inf 0x7fffffff

using namespace std;

vector<int> a;
int ma1,ma2;
char s[N];

void ini()
{
    a.clear();
    ma1 = ma2 = 0;
}

bool cmp(int x,int y)
{
    return x > y;
}

void solve()
{
    sort(a.begin(),a.end(),cmp);
    int sz = a.size();
    if(sz >= 1) {
        ma1 = a[0];
        ma2 = a[0];
    }
    if(sz >= 2) {
        ma2 = a[1];
    }
    printf("%d,%d\n",ma1,ma2);
}

int main()
{
    //freopen("in.txt","r",stdin);
    //scanf("%d",&T);
    //for(int ccnt=1;ccnt<=T;ccnt++){
    ini();
    int x;
    while(scanf("%d",&x) != EOF){
        getchar();
        a.push_back(x);
    }
    solve();
    return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值