ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对拍

2022-04-09 09:34:03  阅读:110  来源: 互联网

标签: case return int res break printf


#include <bits/stdc++.h>
using namespace std;
void Print_Card(int x){
    switch(x){
        case 1:printf("A1");break;
        case 2:printf("A2");break;
        case 5:printf("A5");break;
        case 9:printf("A9");break;
        case 19:printf("A19");break;
        case 49:printf("A49");break;
        case 99:printf("A99");break;
        case -1:printf("B1");break;
        case -9:printf("B9");break;
        case -19:printf("B19");break;
        case 102:printf("C2");break;
        case 103:printf("D2");break;
        case 100:printf("E0");break;
        case 149:printf("E49");break;
        case 199:printf("E99");break;
        case -123:printf("PASS");break;
        case -124:printf("TURN");break;
        case -125:printf("DOUBLE");break;
        default:printf("ERORR");break;
    }
}
int Rand(){
	int x=rand()%18;
	switch(x){
		case 0:return 1;break;
		case 1:return 2;break;
		case 2:return 5;break;
		case 3:return 9;break;
		case 4:return 19;break;
		case 5:return 49;break;
		case 6:return 99;break;
		case 7:return -1;break;
		case 8:return -9;break;
		case 9:return -19;break;
		case 10:return 102;break;
		case 11:return 103;break;
		case 12:return 100;break;
		case 13:return 149;break;
		case 14:return 199;break;
		case 15:return -123;break;
		case 16:return -124;break;
		case 17:return -125;break;
	}
}
int getint(int n){
	int x=rand()%n+1;
	return x;
}
int main(){
	freopen("a+b.in","w",stdout);
	srand(time(0));
	int n=3,m=getint(5),k=500;
	printf("%d %d %d",n,m,k);
	printf("\nFengZixiang ");
	for(int i=1;i<=3;i++){
		int x=Rand();
		Print_Card(x);printf(" ");
	}
	printf("\nZhangShaojia ");
	for(int i=1;i<=3;i++){
		int x=Rand();
		Print_Card(x);printf(" ");
	}
	printf("\nDuboXiong ");
	for(int i=1;i<=3;i++){
		int x=Rand();
		Print_Card(x);printf(" ");
	}
	printf("\n");
	for(int i=1;i<=k;i++){
		int x=Rand();
		Print_Card(x);printf(" ");
	}
}

  std:

#include <bits/stdc++.h>
#define div(x) (x % 2 == 0 ? x / 2 : (x >= 0 ? x / 2 : x / 2 - 1))
using namespace std;
string s[18] = {"C2", "A99", "A49", "A19", "A9", "A5", "A2", "A1", "B1", "B9", "B19", "D2", "E99", "E49", "E0", "PASS", "TURN", "DOUBLE"};
string s2[18] = {"E99", "E49", "E0", "C2", "A99", "A49", "A19", "A9", "A5", "A2", "A1", "B1", "B9", "B19", "D2", "DOUBLE", "TURN", "PASS"};
int p, n, m, k, r = 0, pos = 0;
bool turn = false;
struct player{
    string name, c[3];
    bool under_double = false;
}a[107];
struct nod{
    int x;
    string name;
    int pos;
};
string dump[1000007];
int find(string x){
    for(int i = 0; i < 18; i++) if(x == s[i]) return i;
    return 2147483647;
}
int find2(string x){
    for(int i = 0; i < 18; i++) if(x == s2[i]) return i;
    return 2147483647;
}
bool cmp3(nod a, nod b){
    if(a.x == b.x) return find(a.name) < find(b.name);
    return a.x > b.x;
} 
bool cmp4(nod a, nod b){
    if(a.x == b.x) return find2(a.name) > find2(b.name);
    return a.x < b.x;
}
vector<nod> v;
bool dbl;
void check(string x, int po){//打出x以后的效果,并且记录结果 
    if(x == "C2") v.push_back({p * 2, "C2", po});
    if(x[0] == 'A'){
        int res = 0;
        for(int i = 1; i < x.size(); i++){
            res += x[i] - '0';
            res *= 10;
        }
        res /= 10;
        v.push_back({p + res, x, po});
    }
    if(x[0] == 'B'){
        int res = 0;
        for(int i = 1; i < x.size(); i++){
            res += x[i] - '0';
            res *= 10;
        }
        res /= 10;
        v.push_back({p - res, x, po});
    }
    if(x == "D2") v.push_back({div(p), "D2", po});
    if(x[0] == 'E'){
        int res = 0;
        for(int i = 1; i < x.size(); i++){
            res += x[i] - '0';
            res *= 10;
        }
        res /= 10;
        v.push_back({res, x, po});
    }
    if(x == "PASS" || x == "TURN" || x == "DOUBLE") v.push_back({-2147483647, x, po});
    return;
}
void lose(int x);
void use(int x){//第x个人出牌 
    bool flag = false; 
//    cout << a[x].name << " " << a[x].under_double << " " << turn << " ";
    if(a[x].under_double){
//        cout << "aaa" << endl;
        a[x].under_double = false;
        v.clear();
        for(int i = 0; i < 3; i++) check(a[x].c[i], i);
        sort(v.begin(), v.end(), cmp4);
//        cout << v[0].name << " " << v[0].x << " " << v[1].name << " " << v[1].x << " " << v[2].name << " " << v[2].x << endl;
        for(int i = 0; i < 3; i++){
            if(v[i].name == "PASS"){
                cout << a[x].name << " used " << v[i].name << ",now p=" << p << "." << endl;
                a[x].c[v[i].pos] = dump[pos], pos++;
                turn ? a[(x - 1 + n) % n].under_double = true : a[(x + 1) % n].under_double = true;
                turn ? use((x - 1 + n) % n) : use((x + 1) % n);
                return;
            }
            if(v[i].name == "TURN"){
                cout << a[x].name << " used " << v[i].name << ",now p=" << p << "." << endl;
                a[x].c[v[i].pos] = dump[pos], pos++;
                turn = !turn;
                turn ? a[(x - 1 + n) % n].under_double = true : a[(x + 1) % n].under_double = true;
                turn ? use((x - 1 + n) % n) : use((x + 1) % n);
                return;
            }
            if(v[i].name == "DOUBLE"){
                cout << a[x].name << " used " << v[i].name << ",now p=" << p << "." << endl;
                a[x].c[v[i].pos] = dump[pos], pos++;
                turn ? a[(x - 1 + n) % n].under_double = true : a[(x + 1) % n].under_double = true;
                turn ? use((x - 1 + n) % n) : use((x + 1) % n);
                return;
            }
            if(v[i].name != "PASS" && v[i].name != "TURN" && v[i].name != "DOUBLE"){
                if(v[i].x <= 99){
                    cout << a[x].name << " used " << v[i].name << ",now p=" << v[i].x << "." << endl;
                    p = v[i].x;
                    flag = true;
                    a[x].c[v[i].pos] = dump[pos], pos++;
                    break;
                }
            }
        }
    }
    if(!flag && a[x].under_double){
        lose(x);
        return;
    }
    flag = false;
    v.clear();
    for(int i = 0; i < 3; i++) check(a[x].c[i], i);
    sort(v.begin(), v.end(), cmp3);
//    cout << v[0].name << " " << v[0].x << " " << v[1].name << " " << v[1].x << " " << v[2].name << " " << v[2].x << endl;
    for(int i = 0; i < 3; i++){
        if(v[i].name != "PASS" && v[i].name != "TURN" && v[i].name != "DOUBLE"){
            if(v[i].x <= 99){
                p = v[i].x;
                cout << a[x].name << " used " << v[i].name << ",now p=" << v[i].x << "." << endl;
                flag = true;
                a[x].c[v[i].pos] = dump[pos], pos++;
                break;
            }
        }else{
            if(v[i].name == "PASS"){
                cout << a[x].name << " used " << v[i].name << ",now p=" << p << "." << endl;
                a[x].c[v[i].pos] = dump[pos], pos++;
                turn ? use((x - 1 + n) % n) : use((x + 1) % n);
                return;
            }
            if(v[i].name == "TURN"){
                cout << a[x].name << " used " << v[i].name << ",now p=" << p << "." << endl;
                a[x].c[v[i].pos] = dump[pos], pos++;
                turn = !turn;
                turn ? use((x - 1 + n) % n) : use((x + 1) % n);
                return;
            }
            if(v[i].name == "DOUBLE"){
                cout << a[x].name << " used " << v[i].name << ",now p=" << p << "." << endl;
                a[x].c[v[i].pos] = dump[pos], pos++;
                turn ? a[(x - 1 + n) % n].under_double = true : a[(x + 1) % n].under_double = true;
                turn ? use((x - 1 + n) % n) : use((x + 1) % n);
                return;
            }
        }
    }
    if(!flag){
        lose(x);
        return;
    }
    turn ? use((x - 1 + n) % n) : use((x + 1) % n);
}
void play(int lst){//last
    p = 0;
    turn = false;
    for(int i = 0; i < n; i++) a[i].under_double = false;
    if(r == m) exit(0);
    r++;
    printf("Round %d:\n", r);
    use(lst); 
}
void lose(int x){//第x个人输了 
    cout << a[x].name << " lost the game." << endl;
    a[x].c[0] = dump[pos], pos++;
    a[x].c[1] = dump[pos], pos++;
    a[x].c[2] = dump[pos], pos++; 
    play(x);
}
int main(){
    freopen("a+b.in","r",stdin);
    freopen("1.out","w",stdout);
    cin >> n >> m >> k;
    string pl, s1, s2, s3;
    for(int i = 0; i < n; i++){
        cin >> pl >> s1 >> s2 >> s3;
        a[i].name = pl;
        a[i].c[0] = s1;
        a[i].c[1] = s2;
        a[i].c[2] = s3;
    }
    for(int i = 0; i < k; i++) cin >> dump[i];
    play(0);
    return 0; 
}
//好孩子不要抄袭哦

checher:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#define X first
#define Y second
#define fo(i,n) for(int i=0;i<n;i++)
#define fr(i,n) for(int i=1;i<=n;i++)
#define pb push_back

using namespace std;

typedef long long ll;

const int mod=(int)1e9+7;

int main(){
    while(1){
        system("make.exe");
        system("std.exe");
        system("wrong.exe");
        if(system("fc 1.out 2.out"))
            break;
    }
    return 0;
}

wrong自己打,加上

freopen("a+b.in","r",stdin);
freopen("2.out","w",stdout);

标签:,case,return,int,res,break,printf
来源: https://www.cnblogs.com/bingyuanluotuo/p/16120874.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有