2022天梯赛练习集(2022.9-2022.10)

news2024/11/28 16:36:17

使用函数判断完全平方数 

没有加(int)过不了 

int IsSquare(int n){
	if((int)sqrt(n) * sqrt(n) != n) return 0;
	else return 1;
}

使用函数求余弦函数的近似值 

double funcos(double e, double x){
    double sum = 1, item = 1;
    for(int i = 0; fabs(item) >= e; i += 2){
        item = (-1) * item * x * x / ((i + 1) * (i + 2));
        sum += item;
    }
    return sum;
}

6-13 使用函数输出水仙花数

int narcissistic(int number){
	int n = number;
    int item = 0, sum = 0, cnt = 0;
	while(n){
		n /= 10;
        cnt ++;
	}
	item = number;
    while(item){
        int lastnumber = item % 10;
        sum += pow(lastnumber, cnt);
        item /= 10;
    }
    if(sum == number) return 1;
	return 0;
	
}
void PrintN(int m, int n){
	for(int i = m + 1; i < n; i ++ ){
		if(narcissistic(i)) printf("%d\n", i);
	}
}

6-18 使用函数输出指定范围内的完数 

在一些高级语言当中,为了能够完成更好的逻辑判断,因此就有了bool类型,bool类型的变量值只有true和false两种。

而在C语言中,一般认为0为假,非0为真。
这是因为c99之前,c90是没有bool类型的的。但是c99引入了_Bool类型(_Bool就是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了 bool,为了保证C/C++兼容性)。
目前为止大部分C语言书籍采用的标准还是c90标准,因此我们很少用bool类型。
 

factorsum函数中如果是

int factorsum( int number ){
    int sum = 1;
    for(int i = 2; i < number; i ++ ){
        if(number % i == 0) sum += i;
    }
    return sum;
}

过不了 最大范围 的测试点

int factorsum( int number ){
    int sum = 0;
    for(int i = 1; i < number; i ++ ){
        if(number % i == 0) sum += i;
    }
    return sum;
}
void PrintPN( int m, int n ){
    int flag = 0;
    for(int i = m; i <= n; i ++ ){
        if(factorsum(i) == i){
            flag = 1;
            printf("%d = 1", i);
            for(int j = 2; j < i; j ++ ){
                if(i % j == 0) printf(" + %d", j);
            }
            printf("\n");
        }
    }
    if(!flag) printf("No perfect number");
}

6-19 使用函数输出指定范围内的Fibonacci数

一开始的代码一直出现 [PTA报错]warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result 的问题

下面的ac代码反向使用cnt,和我平时的用法感觉妙了点(?

int fib( int n ){
    if(n == 1 || n == 2) return 1;
    return fib(n - 1) + fib(n - 2);
}
void PrintFN( int m, int n ){
    int cnt = 1, flag = 0;
    for(int i = 1; fib(i) <= n; i ++ ){
        if(fib(i) >= m && fib(i) <= n){
            if(cnt){
                printf("%d", fib(i));
                cnt = 0;
            }
            else printf(" %d", fib(i));
            flag = 1;
        }
    }
    if(!flag) printf("No Fibonacci number");
}

6-30 删除字符

void delchar( char *str, char c ){
    int j = 0;
    for(int i = 0; *(str + i) !='\0'; i ++ ){
        if(*(str + i) != c){
            *(str + j) = *(str + i);
            j ++;
        }
    }
    *(str + j) = '\0';
}

6-31 字符串的连接 

char *str_cat( char *s, char *t ){
    int len_s = strlen(s);
    int len_t = strlen(t);
    for(int i = 0; i < len_t; i ++ ){
        *(s + len_s + i) = *(t + i);
    }
    return &s[0];
}

6-46 指定位置输出字符串 

char *match( char *s, char ch1, char ch2 ){
    char *p;
    int i;
    for(i = 0; i < strlen(s); i ++ ){
        if(s[i] == ch1) break;
    }
    p = &s[i];
    for(int j = i; j < strlen(s); j ++ ){
        printf("%c", s[j]);
        if(s[j] == ch2) break;
    }
    printf("\n");
    return p;
}

6-47 查找子串 

char *search( char *s, char *t ){
    int flag = 0;
    for(int i = 0; s[i] != '\0'; i ++ ){
        for(int j = 0; t[j] != '\0'; j ++ ){
            flag = 0;
            if(s[i + j] != t[j]) break;
            else flag = 1;
        }
        if(flag) return &s[i];
    }
    return NULL;
}


6-49 建立学生信息链表

void input(){
    struct stud_node *p;
    p = (struct stud_node *)malloc(sizeof(struct stud_node));
    scanf("%d", &p->num);
    while(p->num != 0){
        scanf("%s %d", p->name, &p->score);
        if(head == NULL){
            head = p;
            head->next = NULL;
        }
        if(tail != NULL) tail->next = p;
        tail = p;
        tail->next = NULL;
        p = (struct stud_node *)malloc(sizeof(struct stud_node));
        scanf("%d", &p->num);
    }
}

6-50 学生成绩链表处理 

struct stud_node *createlist(){
    struct stud_node *head, *tail, *s;
    head = (struct stud_node *)malloc(sizeof(struct stud_node));
    head->next = NULL;
    tail = head;
    s = (struct stud_node *)malloc(sizeof(struct stud_node));
    while(1){
		s=(struct stud_node*)malloc(sizeof(struct stud_node));
		scanf("%d",&s->num);
		if(s->num==0)break;
		scanf("%s",s->name);
		scanf("%d",&s->score);
		s->next=NULL;
		tail->next=s;
		tail=s;
	}
    return head;
}
struct stud_node *deletelist( struct stud_node *head, int min_score ){
    struct stud_node *p, *n;
    p = head->next;
    while(p != NULL){
        if(p->score < min_score){
            n = head;
            while(n->next != p) n = n->next;
            n->next = p->next;
            free(p);
        }
        p = p->next;
    }
    return head->next;
}

6-51 逆序数据建立链表 

struct ListNode *createlist(){
    struct ListNode *head, *tail, *p;
    head = tail = NULL;
    int num;
    while(scanf("%d", &num) && num != -1){
        p = (struct ListNode *)malloc(sizeof(struct ListNode));
        p->data = num;
        p->next = head;
        head = p;
    }
    return head;
}

6-52 链表拼接 

struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2){
    struct ListNode *head;
    head = (struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *p = head, *p1 = list1, *p2 = list2;
    while(p1 && p2){
        if(p1->data < p2->data){
            p->next = p1;
            p1 = p1->next;
            p = p->next;
        }
        else{
            p->next = p2;
            p2 = p2->next;
            p = p->next;
        }
    }
    p->next = p1 ? p1 : p2;
    return head->next;
}

6-53 奇数值结点链表 

struct ListNode *readlist(){
    struct ListNode *head = NULL;
    struct ListNode *current, *prev;
    int n;
    while(scanf("%d", &n) == 1 && n != -1){
        current = (struct ListNode *)malloc(sizeof(struct ListNode));
        if(head == NULL) head = current;
        else prev->next = current;
        current->next = NULL;
        current->data = n;
        prev = current;
    }
    return head;
}
struct ListNode *getodd( struct ListNode **L ){
    struct ListNode *t = *L;
    struct ListNode *head_even = NULL, *head_odd = NULL;
    struct ListNode *current_even, *current_odd, *prev_even, *prev_odd;
    while(t){
        if((t->data % 2) == 0){
            current_even = (struct ListNode *)malloc(sizeof(struct ListNode));
            if(head_even == NULL) head_even = current_even;
            else prev_even->next = current_even;
            current_even->next = NULL;
            current_even->data = t->data;
            prev_even = current_even;
        }
        else{
            current_odd = (struct ListNode *)malloc(sizeof(struct ListNode));
            if(head_odd == NULL) head_odd = current_odd;
            else prev_odd->next = current_odd;
            current_odd->next = NULL;
            current_odd->data = t->data;
            prev_odd = current_odd;
        }
        t = t->next;
    }
    *L = head_even;
    return head_odd;
}

6-54 单链表结点删除 

hhhhh,仿照上面的自己敲出来了红红火火恍恍惚惚哈哈哈(已疯 

struct ListNode *readlist(){
    struct ListNode *head = NULL;
    struct ListNode *prev, *current;
    int n;
    while(scanf("%d", &n) == 1 && n != -1){
        current = (struct ListNode *)malloc(sizeof(struct ListNode));
        if(head == NULL) head = current;
        else prev->next = current;
        current->next = NULL;
        current->data = n;
        prev = current;
    }
    return head;
}
struct ListNode *deletem( struct ListNode *L, int m ){
    struct ListNode *t = L;
    struct ListNode *head = NULL;
    struct ListNode *current, *prev;
    while(t){
        if(t->data != m){
            current = (struct ListNode *)malloc(sizeof(struct ListNode));
            if(head == NULL) head = current;
            else prev->next = current;
            current->next = NULL;
            current->data = t->data;
            prev = current;
        }
        t = t->next;
    }
    return head;
}

6-55 链表逆置 

struct ListNode *reverse( struct ListNode *head ){
    struct ListNode *Head, *p, *q;
    p = head;
    Head = NULL;
    while(p){
        q = p->next;
        p->next = Head;
        Head = p;
        p = q;
    }
    return Head;
}

6-56 统计专业人数 

int countcs( struct ListNode *head ){
    int cnt = 0;
    if(head == NULL) return cnt;
    while(head){
        char code[8];
        strcpy(code, head->code);
        if(code[1] == '0' && code[2] == '2') cnt ++;
        head = head->next;
    }
    return cnt;
}

 6-57 删除单链表偶数节点

这道题就是前面单链表结点删除直接复制粘贴改几个就ac了( 

struct ListNode *createlist(){
    struct ListNode *head = NULL;
    struct ListNode *prev, *current;
    int n;
    while(scanf("%d", &n) == 1 && n != -1){
        current = (struct ListNode *)malloc(sizeof(struct ListNode));
        if(head == NULL) head = current;
        else prev->next = current;
        current->next = NULL;
        current->data = n;
        prev = current;
    }
    return head;
}
struct ListNode *deleteeven( struct ListNode *head ){
    struct ListNode *t = head;
    struct ListNode *Head = NULL;
    struct ListNode *current, *prev;
    while(t){
        if(t->data % 2 != 0){
            current = (struct ListNode *)malloc(sizeof(struct ListNode));
            if(Head == NULL) Head = current;
            else prev->next = current;
            current->next = NULL;
            current->data = t->data;
            prev = current;
        }
        t = t->next;
    }
    return Head;
    
}

 7-45 高速公路超速处罚

打%号 %%

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 40;
int main(){
	int v, lv;
	cin >> v >> lv;
	double x = 100.0 * (v - lv) / lv;
	if(x < 10) cout << "OK";
	else if(x < 50) printf("Exceed %.lf%%. Ticket 200\n", x);
	else printf("Exceed %.lf%%. License Revoked\n", x);
	return 0;
} 

 7-54 猜数字游戏

if else 过不了,要用if if if,因为后面还有一个循环外的条件不能都过??就是感觉这题还是不太会wwwww

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 40;
int main(){
	int sn, n;
	cin >> sn >> n;
	int cnt = 0;
	for(int i = 1; i <= n; i ++ ){
		int a;
		cin >> a;
		cnt ++ ;
		
		if(a == sn && cnt == 1){
			cout << "Bingo!" << endl;
			break;
		}
		else if(a == sn && cnt <= 3 && cnt >= 1){
			cout << "Lucky you!" << endl;
			break;
		}
		else{
			if(a < 0){
				cout << "Game over" << endl;
				break;
			}
			if(a > sn){
				cout << "Too big" << endl;
			}
			if(a < sn){
				cout << "Too small" << endl;
			}
            if(a == sn){
                cout << "Good Guess!" << endl;
                break;
            }
		}
		if(a != sn && cnt == n){
			cout << "Game over" << endl;
		}
	}
	return 0;
} 

7-56 高空坠球

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 40;

int main(){
	double H, n;
	cin >> H >> n;
	if(n == 0){
		printf("0.0 0.0");
        return 0;
	} 
	double sum = 0, h = H;
	for(int i = 1; i <= n; i ++ ){
		sum += h;
		h /= 2;
		sum += h;
	}
	printf("%.1lf %.1lf", sum - h, h);
	return 0;
} 

7-57 求分数序列前N项和 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 40;

int main(){
	int n;
	cin >> n;
	double sum  = 0;
	double z = 2.0, m = 1.0;
	for(int i = 1; i <= n; i ++ ){
		sum += z / m;
		double t = z; 
		z += m;
		m = t;
	}
	printf("%.2lf", sum);
	return 0;
} 

7-58 求e的近似值 

自定的fun函数int型过不了,要double

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 40;
double fun(int n){
	double ans = 1;
	for(int i = 1; i <= n; i ++ ){
		ans *= i;
	}
	return ans;
}
int main(){
	int n;
	cin >> n;
	double sum = 1; 
	for(int i = 1; i <= n; i ++ ){
		sum += 1.0 / fun(i);
	}
	printf("%.8lf", sum);
	return 0;
} 

7-61 求幂级数展开的部分和 

a啊啊啊啊啊·,还是没做出来,超时了一个点QAQ 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
//const int N = 40;
int main(){
	double x;
	cin >> x;
	double sum = 1.0, ans = 1.0;
	for(int i = 1;; i ++ ){
		ans = (ans * x) / i;
        sum += ans;
        if(ans < 1e-5) break;
	}
	printf("%.4lf", sum);
	return 0;
} 

7-71 交换最小值和最大值 

交换位置的时候amax要在amin前面,不然 最小值出现最后 的测试点不能过

分析一下,如果最小值在最后,最大值在最前面的情况下:

eg:8 2 5 4 1

ac的代码来分析,先找到的是和amax相等的a[0], 交换后就变成了 1 2 5 4 8

继续循环,然后找到了和amin相等的a[0], 交换后变成了 1 2 5 4 8

拿 最小值出现最后 的测试点不能过的代码来说:

eg:8 2 5 4 1

先找到的是和amax相等的a[0], 交换后变成了1 2 5 4 8

但是这时候只能继续循环开始 i = 1 了,可是此时最小值在 i = 0 , 所以无法交换最小值到最后的位置 

//最小值出现在最后的测试点过不了
for(int i = 0; i < n; i ++ ){
		if(amin == a[i]){
			a[i] = a[0] ^ a[i];
			a[0] = a[0] ^ a[i];
			a[i] = a[0] ^ a[i];
		}
		if(amax == a[i]){
			a[n - 1] = a[n - 1] ^ a[i];
			a[i] = a[n - 1] ^ a[i];
			a[n - 1] = a[n - 1] ^ a[i];
		}
	}

 AC代码

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 10;
int a[N];
int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i ++ ) cin >> a[i];
	int amin = a[0], amax = a[0];
	for(int i = 1; i < n; i ++ ){
		amin = min(amin, a[i]);
		amax = max(amax, a[i]);
	}
	for(int i = 0; i < n; i ++ ){
        if(amax == a[i]){
			int t = a[n - 1];
            a[n - 1] = amax;
            a[i] = t;
		}
		if(amin == a[i]){
			int t = a[0];
            a[0] = amin;
            a[i] = t;
		}
	}
	for(int i = 0; i < n; i ++ ) cout << a[i] << " ";
	return 0;
} 

7-75 找出不是两个数组共有的元素 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 25;
int a[N], b[N], c[N];
int main(){
    int n, m, i, j;
    int k = 0;
    cin >> n;
    for(i = 0; i < n; i ++ ) cin >> a[i];
    cin >> m;
    for(j = 0; j < m; j ++ ) cin >> b[j];
    for(i = 0; i < n; i ++ ){
    	for(j = 0; j < m; j ++ ){
    		if(a[i] == b[j]) break;
		}
		if(j == m) c[k ++ ] = a[i];
	}
	for(i = 0; i < m; i ++ ){
		for(j = 0; j < n;  j ++ ){
			if(a[j] == b[i]) break;
		}
		if(j == n) c[k ++ ] = b[i];
	}
    cout << c[0];
	for(i = 1; i < k; i ++ ){
		for(j = 0; j < i; j ++ ){
			if(c[i] == c[j]) break;
		}
		if(j == i) cout << " " << c[i];
	}
	return 0;
} 

7-85 螺旋方阵

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 15;
int a[N][N];
int main(){
    int n;
    cin >> n;
    int row = 0, col = n - 1, num = 1;
    while(row <= col){
    	for(int i = row; i <= col; i ++ ){
    		a[row][i] = num ++ ;
		}
		for(int i = row + 1; i <= col; i ++ ){
			a[i][col] = num ++ ;
		} 
		for(int i = col - 1; i >= row; i -- ){
			a[col][i] = num ++ ;
		}
		for(int i = col - 1; i >= row + 1; i -- ){
			a[i][row] = num ++ ;
		}
		row ++ , col -- ;
	}
	for(int i = 0; i < n; i ++ ){
		for(int j = 0; j < n; j ++ ){
			printf("%3d", a[i][j]);
		}
		puts("");
	}
	return 0;
} 

7-88 统计字符出现次数 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 350;
int a[N];
int main(){
    char c;
    c = getchar();
    while(c != '\n'){
        a[c] ++ ;
        c = getchar();
    }
    c = getchar();
    cout << a[c];
	return 0;
} 

7-92 字符串转换成十进制整数

 感觉就是有没有做过和看看ASCII的问题

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int N = 1e5 + 10;
LL fun(char *str){
    LL x = 0;
	for(int i = 0; i < strlen(str); i ++ ){
		if(str[i] >= '0' && str[i] <= '9')
		    x = x * 16 + str[i] - '0';
        else if(str[i] >= 'A' && str[i] <= 'F')
		    x = x * 16 + str[i] - 'A' + 10;
	}
    return x;
}
int main(){
	char s[N], str[N];;
	cin >> s;
	int flag = 0, mul = 0, cnt = 0;
	for(int i = 0; i < strlen(s); i ++ ){
		s[i] = toupper(s[i]);
		if(flag == 0){
			if(s[i] == '-'){
                flag = 1;
                mul = 1;
            }
			else if((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'A' && s[i] <= 'F')){
                flag = 1;
                str[cnt ++ ] = s[i];
            }
		}
		else{
			if((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'A' && s[i] <= 'F')){
                str[cnt ++] = s[i];
			}
		}
	}
	LL ans = fun(str);
	if(mul == 1) ans *= -1;
    cout << ans << endl;
	return 0;
} 

7-103 查找书籍

一开始忘记map还有自动根据key值排序的功能了 

#include<bits/stdc++.h> 
#define INF 0x3f3f3f3f
#define x first
#define y second
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
map<double, string> mp;
int main(){
	int n;
	cin >> n;
    getchar();
	while(n -- ){
	 	string name;
	 	double price;
	 	getline(cin, name);
	 	cin >> price;
        getchar();
	 	mp[price] = name;
	 }
	 cout << fixed << setprecision(2) << (--mp.end())->x << ", " << (--mp.end())->y << endl;
	 cout << fixed << setprecision(2) << mp.begin()->x << ", " << mp.begin()->y << endl;
	return 0;
} 

7-105 平面向量加法 

一开始nt了一下,进位考虑应该考虑保留最后一位的后一位 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 1e5 + 10;

int main(){
	double x1, x2, y1, y2;
	cin >> x1 >> y1 >> x2 >> y2;
	double x = x1 + x2;
	double y = y1 + y2;
    if(fabs(x) < 0.05) x = 0.0;
    if(fabs(y) < 0.05) y = 0.0;
	printf("(%.1lf, %.1lf)", x, y);
	return 0;
} 

 7-108 英文单词排序

哥们觉得vector pair auto 用法需要记一下 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 1e5 + 10;
typedef pair<int, int> pr;
vector<pr> v;
int cnt;
string t[N];
int main(){
	string s;
	while(cin >> s && s != "#"){
		v.push_back({s.size(), cnt});
		t[cnt ++ ]  = s;
	}
	sort(v.begin(), v.end());
	for(auto i : v){
		cout << t[i.y] << " ";
	}
	return 0;
} 

7-109 藏头诗

这道题上次做还是int行,改成UTF-8把我干蒙了,触及到只是盲区了

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 1e5 + 10;

int main(){
	string s;
	for(int i = 0; i < 4; i ++ ){
		getline(cin, s);
		cout << s[0] << s[1] << s[2];
	}
	return 0;
} 

7-110 自动售货机 

 一开始没注意,被以前的思维带偏了,我为什么要想他一样的物品剩多少匹配多少的问题,NND

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 20;
int a[N];
int sum, total;
int main(){
	int n;
	while(cin >> n, n != -1){
		total += n;
	}
	while(cin >> n, n != -1){
		a[n] ++ ; //编号为n的总数量 
		if(n > 0 && n < 4) sum ++ ;
		else if(n > 3 && n < 6) sum += 2;
		else if(n > 5 && n < 9) sum += 3;
		else sum += 4;
	}
	if(total < sum) cout << "Insufficient money" << endl;
	else{
		printf("Total:%dyuan,change:%dyuan\n", total, total - sum);
		for(int i = 0; i < 11; i ++ ){
			if(a[i]){
				switch(i){
					case 1:printf("Table-water:%d;", a[i]);break;
					case 2:printf("Table-water:%d;", a[i]);break;
					case 3:printf("Table-water:%d;", a[i]);break;
					case 4:printf("Coca-Cola:%d;", a[i]);break;
					case 5:printf("Milk:%d;", a[i]);break;
					case 6:printf("Beer:%d;", a[i]);break;
					case 7:printf("Orange-Juice:%d;", a[i]);break;
					case 8:printf("Sprite:%d;", a[i]);break;
					case 9:printf("Oolong-Tea:%d;", a[i]);break;
					case 10:printf("Green-Tea:%d;", a[i]);break;
				}
			}
			
		} 
	}
	return 0;
} 

7-111 停车场管理 

怪,这题真的怪,代码好像可以卡bug 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 11;
int place[N], tim[N], wait[N];
int waiti = -1;
int main(){
	int n;
	cin >> n;
	while(1){
		char x;
		int carnum, cartime;
		cin >> x >> carnum >> cartime;
		if(x == 'E') break; 
		else if(x == 'A'){
			int flag = 0;
			for(int i = 1; i <= n; i ++ ){
				if(place[i] == 0){
					flag = i;
					break;
				}
			}
			if(flag){
				place[flag] = carnum;
				cout << "car#" << carnum << " in parking space #" << flag << endl;
			}
			else{
				wait[++ waiti] = carnum;
				cout << "car#" << carnum << " waiting" << endl;
			}
		}
		else if(x == 'D'){
			int flag = 0;
			for(int i = 0; i <= n; i ++ ){
			    if(place[i] == carnum){
			    	flag = i;
			        break;
				} 
			}
			if(!flag) cout << "the car not in park" << endl;
			else{
				cout << "car#" << carnum << " out,parking time " << tim[flag] << endl;
				place[flag] = 0;
				tim[flag] = 0;
				int t = 0;
				for(int i = flag; i <= n; i ++ ){
					place[i] = place[i + 1];
					tim[i] = tim[i + 1];
					if(i == n){
						place[i] = 0;
						tim[i] = 0;
					}
					t = i;
				}
				if(waiti != -1){
					place[t] = wait[0];
					for(int i = 0; i < waiti; i ++ ){
						wait[i] = wait[i + 1];
					}
					waiti -- ;
					cout << "car#" << place[t] << " in parking space #" << t << endl;
				}
				
			}
		}
		for(int i = 1; i <= n; i ++ ){
			if(place[i]) tim[i] ++ ;
		}
	}
	return 0;
} 

7-112 值班安排 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 20;
struct st{
    int obj1;
    int obj2;
    int num;
    int ret;
}st[N];
int judge(int *d, int n){
    int ret = 1;
    for(int i = 0; i < n; i ++ ){
        if(st[i].ret){
            if(d[st[i].obj1] != st[i].num - 1){
                ret = 0;
                break;
            }
        }
        else if(d[st[i].obj1] + st[i].num != d[st[i].obj2]){
            ret = 0;
            break;
        }
    }
    return ret;
}
int main(){
	int n;
	cin >> n;
    getchar();
    string s;
	for(int i = 0; i < n; i ++ ){
        getline(cin, s);
        st[i].obj1 = s[0] - 'A';
        if(s[1] == '='){
            st[i].ret = 1;
            st[i].num = s[2] - '0';
        }
        else{
            st[i].ret = 0;
            st[i].obj2 = s[2] - 'A';
            st[i].num = s[3] - '0';
            if(s[1] == '<') st[i].num *= -1;
        }
    }
    int day[7];
    int a, b, c, d, e, f, g;
    for(a = 0; a < 7; a ++ ){
        for(b = 0; b < 7; b ++ ){
            for(c = 0; c < 7; c ++ ){
                for(d = 0; d < 7; d ++ ){
                    for(e = 0; e < 7; e ++ ){
                        for(f = 0; f < 7; f ++ ){
                            for(g = 0; g < 7; g ++ ){
                                day[0] = a;
                                day[1] = b;
                                day[2] = c;
                                day[3] = d;
                                day[4] = e;
                                day[5] = f;
                                day[6] = g;
                                if(judge(day, n)) goto E;
                            }
                        }
                    }
                }
            }
        }
    }
E:
    if(judge(day, n)){
        char Day[7];
        for(int i = 0; i < 7; i ++ ){
            Day[day[i]] = i + 'A';
        }
        Day[7] = '\0';
        puts(Day);
    }
	return 0;
} 

7-113 完美的代价

Impossible有两个条件:

1.当n为奇数,如果有两个及以上不能配对的,说明不符合回文串条件

2.当n为偶数,如果相同数字出现奇数次 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 11;
int main(){
	int n;
	string s;
	cin >> n >> s;
	int ed = n - 1;
	int step = 0;
	bool flag = false;
	for(int i = 0; i < ed; i ++ ){
		for(int j = ed; j >= i; j -- ){
			if(i == j){
				if(n % 2 == 0 || flag == true){
					cout << "Impossible"  << endl;
					return 0;
				}
				flag = true;
				step += n / 2 - i;//当前位置到中间位置需要的步数
			}
			else if(s[i] == s[j]){
				for(int k = j; k < ed; k ++ ){
					swap(s[k], s[k + 1]);
					step ++ ;
				}
				ed -- ;
                break;//重点
			}
		}
	}
	cout << step << endl;
	return 0;
} 

L2-1 盲盒包装流水线 

一开始只有22分,卡在了开的不够大,紫砂 ,现在st开的数据我不知道具体怎么算的 QAQ,感觉·就看样例的话就是N=可能的最大数据 / S本题样例5 就不会溢出了(

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 1e5 + 10;
stack<int> st[50010];
queue<int> q;
int a[N];
int main(){
	int n, s, k;
	cin >> n >> s;
	for(int i = 1; i <= n; i ++ ){
		int x;
		cin >> x;
		q.push(x);
	}
	
	int col = n / s;
	for(int i = 0; i < col; i ++ ){
		for(int j = 0; j < s; j ++ ){
			int x;
			cin >> x;
			st[i].push(x);
		}
		for(int j = 0; j < s; j ++ ){
			int x = q.front();
			q.pop();
			int y = st[i].top();
			st[i].pop();
			a[x] = y;
		}
	}
	cin >> k;
	while(k -- ){
		int x;
		cin >> x;
		if(a[x] == 0) cout << "Wrong Number" << endl;
		else cout << a[x] << endl;
	}
	return 0;
} 

L2-2 点赞狂魔 

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 110;
struct person{
	string name;
	set<LL> tag;
	double ave;
}p[N];
bool cmp(person x, person y){
	if(x.tag.size() == y.tag.size()) return x.ave < y.ave;
	return x.tag.size() > y.tag.size();
}
int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i ++ ){
		string s;
		cin >> s;
		p[i].name = s;
		int k;
		cin >> k;
		for(int j = 0; j < k; j ++ ){//woc用while循环过不了
			LL x;
			cin >> x;
			p[i].tag.insert(x);
		}
		p[i].ave = 1.0 * k / p[i].tag.size();
	}
	sort(p, p + n, cmp);
	if(n == 0) cout << "- - -" << endl;
	else if(n == 1) cout << p[0].name << " - -" << endl;
	else if(n == 2) cout << p[0].name << " " << p[1].name << " -" << endl;
	else cout << p[0].name << " " << p[1].name << " " << p[2].name << endl;
	
	return 0;
} 

L2-3 浪漫侧影

#include<bits/stdc++.h> 
using namespace std;
#define INF 0x3f3f3f3f
#define x first
#define y second
typedef long long LL;
const int N = 1e5 + 10;
int midt[25], postt[25], tree[N], level;
void createTree(int *postt, int *midt, int n, int idx){
	if(!n) return ;
	int k = 0;
	while(postt[n - 1] != midt[k]) k ++ ;
	tree[idx] = midt[k];
	level = max(level, idx);
	createTree(postt, midt, k, idx * 2);
	createTree(postt + k, midt + k + 1, n - k - 1, idx * 2 + 1);
}
int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i ++ ) cin >> midt[i];
	for(int i = 0; i < n; i ++ ) cin >> postt[i];
	createTree(postt, midt, n, 1);
	for(int i = 1; i <= 22; i ++ ){
		if(level < pow(2, i)){
			level = i;
			break;
		}
	}
	cout << "R: ";
	int cnt = 0, idx = 1;
	while(cnt < level){
		if(tree[idx]) cout << tree[idx];
		if(tree[idx * 2 + 1]) idx = idx * 2 + 1;
		else if(tree[idx * 2]) idx *= 2;
		else{
			idx *= 2;
			while(!tree[idx]) idx -- ;
		}
		cnt ++ ;
		if(cnt != level) cout << ' ';
		else cout << endl;
	}
	cout << "L: ";
	cnt = 0, idx = 1;
	while(cnt < level){
		if(tree[idx]) cout << tree[idx];
		if(tree[idx * 2]) idx *= 2;
		else if(tree[idx * 2 + 1]) idx = idx * 2 + 1;
		else{
			idx *= 2;
			while(!tree[idx]) idx ++ ;
		}
		cnt ++ ;
		if(cnt != level) cout << ' ';
		else cout << endl;
	}
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tmuxs -高效使用Linux terminal

Tmuxs -高效使用Linux terminal前言what&#xff1f;重要概念安装Tmux 常用命令Tmux 常用内部命令窗口&#xff08;window&#xff09;指令&#xff1a;面板&#xff08;pane&#xff09;指令&#xff1a;如何用鼠标调整pane大小配置生效参考配置参考前言 这个利器绝对可以提升…

eMMC编程基础 -(二)eMMC基础介绍

eMMC编程基础 -&#xff08;二&#xff09;eMMC基础介绍1 eMMC 简介1.1 eMMC系统概述1.2 eMMC 的整体架构如下图片所示&#xff1a;2 Flash Memory1 eMMC 简介 eMMC 是 embedded MultiMediaCard 的简称。 eMMC 是对 MMC 的一个拓展&#xff0c;以满足更高标准的性能、成本、体…

文件包含笔记

很多语言支持使用包含文件&#xff0c;这样允许开发者把可重复使用的代码存入单个文件中&#xff0c;在未来需要使用时&#xff0c;将它包含在其他代码文件中即可使用。 如果是像 C/C 这种编译语言&#xff0c;即使可以包含任意文件&#xff0c;若没有调用其中函数也不会有什么…

【从零开始学微服务】05.微服务的优势和不足

大家好&#xff0c;欢迎来到万猫学社&#xff0c;跟我一起学&#xff0c;你也能成为微服务专家。 没有“银弹” 在一些电影中&#xff0c;“银弹”被视作能迅速杀死狼人的武器&#xff0c;是杀死狼人的灵丹妙药。“银弹”常被比喻为解决复杂问题的良方或高招。 由于软件的复杂…

11.27

一.进制转换 这道题的思路就是先把每个数模对应的进制.再除以,就得到对应的, 因为可能会有16进制,所以直接弄一个字符串数组,按照"0123456789ABCDEF"顺序存储,再用模找里面对应的就可以了 但是有可能是负数,所以我们需要在此之前判断一下 如果用字符串临时拼接会产…

2008年武汉高校630操作系统真题B卷

操作系统————核心系统软件 竞争计算机系统资源的基本单位————进程 UNIX————分时操作系统 操作系统中必不可少的调度————进程调度 进程和程序的本质区别————前者是动态后者是静态 磁带————顺序存储文件 某进程在运行过程中需要等待从磁盘上读入数…

tensorflow-serving docker模型部署(以mnist为例)

✨ 博客主页&#xff1a;小小马车夫的主页 ✨ 所属专栏&#xff1a;Tensorflow 文章目录前言一、环境介绍二、tensorflow-serving docker安装三、单模型部署 (以官方demo saved_model_half_plus_two_cpu为例)1、docker模型部署2、python requests模型预测四、多模型部署 (以mni…

算法提升:图的拓扑排序算法

目录 概念 思路 代码 概念 拓扑序列&#xff1a;一些活动&#xff0c;其中某些活动必须在另一些活动完成之后才能开始&#xff0c;一定是无环的有向图&#xff0c;称为AOV网。 拓扑排序&#xff0c;其实就是对一个有向图构造拓扑序列的过程。构造时会有两个结果&#xff1a…

Go中赋值和转换关系

Go中的赋值跟类型转换: 在java中反射是可以获取继承关系,而go语言实际是不支持继承的,所以必须是相同的类型才能使用AssignableTo(),ConvertibleTo() package mainimport ("fmt""reflect" )type User struct {Name string } func demo(){user:User{Name:…

C#语言实例源码系列-实现自定义屏保

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

Class文件结构

文章目录1.概述1.1 字节码文件的跨平台性1.2 Java的前端编译器1.3 透过字节码指令看代码细节2. 虚拟机的基石:Class文件3. Class文件结构3.1 魔数3.2 Class文件版本号3.3 常量池3.4 访问标识3.5 类索引、父类索引、接口索引集合3.6 字段表集合3.7 方法表集合3.8 属性表集合4. 使…

No.178# 混沌工程相关内容梳理

引言随着公司规模业务的快速增长&#xff0c;数以千计甚至万计的微服务&#xff0c;依赖的各类组件越来越多。分布式体系架构体系越来越复杂&#xff0c;没有任何一个人能够掌控所有复杂的耦合性。也就是说复杂性无法避免&#xff0c;不可能再回到单体应用&#xff0c;也无法彻…

西门子精彩触摸屏SMART V3组态配方的具体方法示例

西门子精彩触摸屏SMART V3组态配方的具体方法示例 本次和大家分享在精彩系列触摸屏中进行配方组态的具体方法,以下内容仅供大家参考: 如下图所示,首先,在连接中添加新的连接,这里以S7-200SMART为例,PLC和HMI的IP地址要设置在同一网段内, 如下图所示,在变量中,添加配…

【Java面试】来讲一讲你对String的理解

文章目录字符型常量和字符串常量的区别什么是字符串常量池&#xff1f;String 是最基本的数据类型吗String有哪些特性String为什么是不可变的&#xff1f;String真的是不可变的吗&#xff1f;String不可变的必要性是否可以继承 String 类数组有没有 length()方法&#xff1f;St…

windows线程 互斥锁CreateMutex、ReleaseMutex、CloseHandle

互斥 相关问题 多线程下代码或资源的共享使用。 互斥的使用 1.创建互斥 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全属性&#xff08;废弃参数&#xff0c;置NULL&#xff09; BOOL bInitialOwner,//初始的拥有者TRUE/FALSE LPCTSTR lpName //命名 );…

集成电路技术——如何制造芯片(1)

1.概述 电子工业是现在高新技术的核心&#xff0c;它在人类的科技发展中发挥了巨大作用&#xff0c;电子工业已经成为成为当今世界发展最快的高新技术产业&#xff0c;在全世界各国国民经济中起着举足轻重的作用。当今的电子技术离不开集成电路&#xff0c;集成电路是电子工业…

hadoop集群迁移

集群迁移 主要是要找到两个集群中active状态的namenode 集群迁移不同于服务器之间的文件发送&#xff0c;在hdfs中&#xff0c;文件是以块的形式&#xff0c;只可以通过namenode访问文件&#xff0c;所以迁移时需要通过hadoop命令 主要命令是distcp distcp有很多参数&#xf…

Kafka - 06 Kafka 集群环境搭建(三台服务器)

文章目录1. 克隆虚拟机2. Zookeeper 集群搭建3. Kafka 集群搭建4. 测试消息发送和消费1. 主题操作2. 生产者生产消息3. 消费者消费消息1. 克隆虚拟机 kafka集群搭建&#xff0c;需要3台虚拟机环境&#xff0c;但是我目前只安装了一台虚拟机&#xff0c;因此还需要准备两台虚拟…

[附源码]计算机毕业设计springboot-Steam游戏平台系统论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

纯CSS制作3D动态相册【流星雨3D旋转相册】HTML+CSS+JavaScriptHTML5七夕情人节表白网页制作

这是程序员表白系列中的100款网站表白之一&#xff0c;旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站&#xff0c;可以任意修改和使用&#xff0c;很多人会希望向心爱的男孩女孩告白&#xff0c;生性腼腆的人即使那个TA站在眼前都不敢向前表白…