小学期C++实践

链表

1、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head = NULL;  

int x; 

struct node *reverseList(struct node *head){
    struct node *head1 = NULL;
    struct node *now = NULL; 
    struct node* p = head; 
    vector <int> G; 
    while(p != NULL){
        G.push_back(p->val); 
        p = p->next; 
    }
    for(int i = G.size() - 1; i >= 0; i--){
        struct node *tmp = new node; 
        tmp->val = G[i]; 
        tmp->next = NULL; 
        if(head1 == NULL){
            head1 = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = now->next; 
        }
    }
    return head1; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(scanf("%d", &x) != EOF){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    struct node *head1 = reverseList(head); 
    struct node *p = head1; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

2、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head = NULL;  

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *deleteDuplicates(struct node *head){
    struct node *head1 = NULL;
    struct node *now = NULL; 
    struct node* p = head; 
    int num = head->val; 
    insert(head1, now, num); 
    p = p->next; 
    while(p != NULL){
        if(p->val == num){
            p = p->next; 
            continue; 
        }
        num = p->val; 
        insert(head1, now, num); 
        p = p->next; 
    }
    return head1; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    struct node *head1 = deleteDuplicates(head); 
    struct node *p = head1; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

3、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head = NULL;  

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *deleteDuplicates(struct node *head){
    struct node* p = head; 
    map<int, int> g; 
    while(p != NULL){
        g[p->val]++; 
        p = p->next; 
    }
    struct node *now = NULL; 
    p = head; 
    head = NULL; 
    while(p != NULL){
        if(g[p->val] == 1){
            insert(head, now, p->val); 
        }
        p = p->next; 
    }
    return head; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    struct node *head1 = deleteDuplicates(head); 
    struct node *p = head1; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

4、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head1 = NULL;  
struct node *head2 = NULL; 

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *addTwoNumbers(struct node *head1, struct node *head2){
    struct node *head = NULL; 
    struct node *now = NULL; 
    
    struct node *p1 = head1, *p2 = head2; 
    int last = 0; 
    while(p1 != NULL && p2 != NULL){
        int x = p1->val + p2->val + last; 
        last = 0; 
        if(x >= 10){
            x -= 10; 
            last += 1; 
        }
        insert(head, now, x); 
        p1 = p1->next; 
        p2 = p2->next; 
    }
    while(p1 != NULL){
        int x = p1->val + last; 
        last = 0; 
        if(x >= 10){
            last = 1; 
            x -= 10; 
        }
        insert(head, now, x); 
        p1 = p1->next; 
    }
    while(p2 != NULL){
        int x = p2->val + last; 
        last = 0; 
        if(x >= 10){
            last = 1; 
            x -= 10; 
        }
        insert(head, now, x); 
        p2 = p2->next; 
    }
    if(last){
        insert(head, now, 1); 
    }

    return head; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head1; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head1 == NULL){
            head1 = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    now = head2; 
    while(cin >> x && x != -1){
        insert(head2, now, x); 
    }

    struct node *head =  addTwoNumbers(head1, head2); 
    struct node *p = head; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

5、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head = NULL;  

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *oddEvenList(struct node *head){
    struct node *head1 = NULL;
    struct node *now = NULL; 
    struct node* p = head; 
    
    int cnt = 0; 
    while(p != NULL){
        cnt++; 
        if(cnt % 2 == 1){
            insert(head1, now, p->val); 
        }
        p = p->next; 
    }
    cnt = 0; 
    p = head; 
    while(p != NULL){
        cnt++; 
        if(cnt % 2 == 0){
            insert(head1, now, p->val); 
        }
        p = p->next; 
    }

    return head1; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    struct node *head1 = oddEvenList(head); 
    struct node *p = head1; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

6、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head = NULL;  

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *partition(struct node *head, int k){
    struct node *head1 = NULL;
    struct node *now = NULL; 
    struct node* p = head; 
    while(p != NULL){
        if(p->val < k){
            insert(head1, now, p->val); 
        }
        p = p->next; 
    }
    p = head;
    while (p != NULL){
        if(p->val >= k) insert(head1, now, p->val); 
        p = p->next; 
    }
    
    return head1; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }
    cin >> x; 

    struct node *head1 = partition(head, x); 
    struct node *p = head1; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

7、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    int sum; // 求前缀和,前缀和相等证明中间部分为 0
    struct node *next; 
    struct node *pre; 
} ;
struct node *head = NULL;  

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *DeleteZero(struct node *head){
    struct node *head1 = NULL;
    struct node *now = NULL; 
    struct node* p = head; 
    struct node *q = NULL; 
    
    head->sum = head->val; 
    while(233){
        p = head; 
        while(p != NULL){
            if(p->next != NULL){
              p->next->sum = p->next->val + p->sum; 
            } 
            p = p->next; 
        } 
        bool flag = 0; 
        p = head, q = head->next; 
        while(p != NULL){
            q = p->next; 
            while(q != NULL){
                if(p->sum == q->sum || q->sum == 0){
                    flag = 1; 
                    break; 
                }
                q = q->next; 
            }
            if(flag) break; 
            p = p->next; 
        }
        if(!flag) break; 
        p = p->next; 
        if(p == head || q->sum == 0) head = q->next; 
        else p->pre->next = q->next; 
    }

    return head; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        tmp->pre = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            tmp->pre = now; 
            now = tmp; 
        }
    }

    struct node *head1 = DeleteZero(head); 
    struct node *p = head1; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}

8、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
} ;
struct node *head1 = NULL;  
struct node *head2 = NULL; 

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}

struct node *mergeTwoLists(struct node *head1, struct node *head2){
    struct node *head = NULL;
    struct node *now = NULL; 
    struct node* p1 = head1, *p2 = head2; 
    
    while(p1 != NULL && p2 != NULL){
        if(p1->val < p2->val){
            insert(head, now, p1->val); 
            p1 = p1->next; 
        }
        else{
            insert(head, now, p2->val); 
            p2 = p2->next; 
        }
    }
    while(p1 != NULL){
        insert(head, now, p1->val); 
        p1 = p1->next; 
    }
    while(p2 != NULL){
        insert(head, now, p2->val); 
        p2 = p2->next; 
    }

    return head; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head1; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head1 == NULL){
            head1 = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        if(head2 == NULL){
            head2 = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            now = tmp; 
        }
    }

    struct node *head = mergeTwoLists(head1, head2); 
    struct node *p = head; 
    while(p != NULL){
        cout << p->val << " "; 
        p = p->next; 
    }
    return 0; 
}


## 9、

```cpp
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int val; 
    struct node *next; 
    struct node *pre; 
} ;
struct node *head = NULL;  

int x; 

void insert(struct node * &head, struct node * &now, int val){
    struct node *tmp = new node; 
    tmp->val = val;
    tmp->next = NULL; 
    if(head == NULL){
        head = tmp; 
        now = tmp; 
    }
    else{
        now->next = tmp; 
        now = tmp; 
    }
    return ; 
}


bool isPalindrome(struct node* head){
    struct node *p = head; 
    struct node *q = NULL; 
    while(p != NULL){
        if(p->next == NULL) q = p; 
        p = p->next; 
    }
    if(q == head) return 1; 
    p = head; 
    while(p != q && p->pre != q){
        // printf("val: %d %d\n", p->val, q->val); 
        if(p->val != q->val) return 0; 
        p = p->next; 
        q = q->pre; 
    }
    return 1; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
    struct node *now = head; 
    while(cin >> x && x != -1){
        struct node *tmp = new node; 
        tmp->val = x; 
        tmp->next = NULL; 
        tmp->pre = NULL; 
        if(head == NULL){
            head = tmp; 
            now = tmp; 
        }
        else{
            now->next = tmp; 
            tmp->pre = now; 
            now = tmp; 
        }
    }

    if(isPalindrome(head)) cout << "True" << endl; 
    else cout << "False" << endl; 



    return 0; 
}


位运算

1、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010


int main(){
//	freopen("hh.txt", "r", stdin); 
    int x = -23; 
    cout << bitset<64>(x) << endl; 
    x >>= 1; 
    cout << bitset<64>(x);      // 对于补码,Windows采取高位补1.
    cout << x << endl; 
    return 0; 
}

2、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010


int main(){
//	freopen("hh.txt", "r", stdin); 
    int a = 9; 
    int b = -2; 
    cout << (int)(a & b) << endl;   
    cout << bitset<65>(a) << endl; 
    cout << bitset<64> (b) << endl;     // 对负数高位补1,转成补码后 & 运算未消去原数字的高位
    return 0; 
}

3、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

string s; 
int a; 

string Int32toSixteen(ll a){
    if(a < 0){
        a = abs(a); 
        for(int i = 0; i < 32; i++)
            a ^= (1ll << i); 
        a += 1; // 取补码
    }
    
    
    string t = ""; 
    while(a){
        int tmp = (a >> 4) << 4; 
        int x = a ^ tmp; 
        // int num = 1 | (1 << 1) | (1 << 2) | (1 << 3); 
        // x ^= num; 
        if(x < 10) t.push_back(x + '0'); 
        else t.push_back(x + 'A' - 10); 
        a >>= 4;
    }
    reverse(t.begin(), t.end()); 
    return t; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
     cin >> a; 
     s = Int32toSixteen(a); 
     cout << s; 
    return 0; 
}

4、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

string s; 
int a; 

string Int32toTwo(ll a){
    if(a < 0){
        a = abs(a); 
        for(int i = 0; i < 32; i++)
            a ^= (1ll << i); 
        a += 1; // 取补码
    }
    
    string t = ""; 
    while(a){
        int tmp = (a >> 1) << 1; 
        int x = tmp ^ a; 
        t.push_back(x + '0'); 
        a >>= 1;
    }
    reverse(t.begin(), t.end()); 
    return t; 
}

int main(){
//	freopen("hh.txt", "r", stdin); 
     cin >> a; 
     s = Int32toTwo(a); 
     cout << s; 
    return 0; 
}

5、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

string s; 
int x = 0; 

int main(){
//	freopen("hh.txt", "r", stdin); 
    cin >> s; 
    if(s[0] == '0'){
        for(int i = 0; i < s.length(); i++){
            x = (x << 1) + (s[i] - '0'); 
        }
        printf("%x\n%d", x, x);  
    }
    else{
        for(int i = 1; i < s.length(); i++){
            x = (x << 1) + (s[i] - '0'); 
        }
        x -= 1; 
        for(int i = 0; i < 15; i++)
            x ^= (1 << i); 
        x *= -1; 
        printf("%x\n%d", x, x);
    }
    
    return 0; 
}

6、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

struct node{
    int a:3;
    int b:5; 
    int c:6; 
    int d:9; 
} t;

int n; 

string Int32toSixteen(ll a){
    if(a < 0){
        a = abs(a); 
        for(int i = 0; i < 32; i++)
            a ^= (1ll << i); 
        a += 1; // 取补码
    }
    
    
    string t = ""; 
    while(a){
        int tmp = (a >> 4) << 4; 
        int x = a ^ tmp; 
        // int num = 1 | (1 << 1) | (1 << 2) | (1 << 3); 
        // x ^= num; 
        if(x < 10) t.push_back(x + '0'); 
        else t.push_back(x + 'A' - 10); 
        a >>= 4;
    }
    reverse(t.begin(), t.end()); 
    return t; 
}

string Int32toTwo(ll a){
    if(a < 0){
        a = abs(a); 
        for(int i = 0; i < 32; i++)
            a ^= (1ll << i); 
        a += 1; // 取补码
    }
    
    string t = ""; 
    while(a){
        int tmp = (a >> 1) << 1; 
        int x = tmp ^ a; 
        t.push_back(x + '0'); 
        a >>= 1;
    }
    reverse(t.begin(), t.end()); 
    return t; 
}


int main(){
//	freopen("hh.txt", "r", stdin); 
    cin >> n; 
    t.a = n, t.b = n, t.c = n, t.d = n; 
    string s1 = Int32toSixteen(t.a);  
    string s2 = Int32toSixteen(t.b); 
    string s3 = Int32toSixteen(t.c);
    string s4 = Int32toSixteen(t.d); 
    cout << s1 << " " << s2 << " " << s3 << " " << s4 << endl; 
    s1 = Int32toTwo(t.a); 
    s2 = Int32toTwo(t.b); 
    s3 = Int32toTwo(t.c);  
    s4 = Int32toTwo(t.d); 
    cout << s1 << " " << s2 << " " << s3 << " " << s4; 
    return 0; 
}

7、

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100010

int main(){
//	freopen("hh.txt", "r", stdin); 
    string s; 
    cin >> s; 
    double flag = 1; 
    if(s[0] == '1') flag = -1; 
    int e = 0; 
    for(int i = 1; i <= 8; i++){
        e = e * 2 + s[i] - '0';
    }
    e -= 127; 
    deque <int> G; 
    G.push_back(1); 
    for(int i = 9; i < s.length(); i++){
        G.push_back(s[i] - '0'); 
    }    
    string s1, s2; 
    if(e < 0){
        int num = abs(e); 
        for(int i = 1; i < num; i++) 
            G.push_front(0);
        while(!G.empty()){
            s2.push_back(G.front()); 
            G.pop_front(); 
        } 
    }
    else{
        for(int i = 0; i <= e; i++){
        	if(G.empty()){
        		s1.push_back(0); 
        		continue; 
			}
            s1.push_back(G.front() + '0'); 
            G.pop_front(); 
        }
        while(!G.empty()){
            s2.push_back(G.front() + '0'); 
            G.pop_front(); 
        }
    }
    double x1 = 0; 
	double x2 = 0; 
    for(int i = 0; i < s1.length(); i++)
        x1 = x1 * 2 + s1[i] - '0';
    for(int i = 0; i < s2.length(); i++)
        x2 += (s2[i] - '0') * (pow(0.5, i + 1));
    cout << flag * (x1 + x2) << endl; 
    return 0; 
}

函数递归

1

#include <bits/stdc++.h>
using namespace std;

int n; 

int f(int n){
    if(n == 1 || n == 2) return 1; 
    return f(n - 2) + f(n - 1); 
}

int main(){
    cin >> n; 
    cout << f(n) << endl; 
    return 0; 
}

2

#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long

void convert(int n){
    if(n == 0) return ; 
    convert(n / 10); 
    cout << (char)(n % 10 + '0'); 
    return ; 
}

int main(){
    long n; 
    cin >> n; 
    if(n < 0){
        putchar('-'); 
        n = abs(n); 
    }
    convert(n); 
    return 0; 
}

3

#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long

char s[6]; 

void dfs(int now){
    if(now == 6) return ;  
    dfs(now + 1); 
    printf("%c", s[now]); 
    return ; 
}

int main(){
    cin >> s + 1; 
    dfs(1); 
    return 0; 
}

4

#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long

string s; 

bool vis[N]; 
string t; 
set <string> G; 

void dfs(int now){
    if(now > s.length()){
        G.insert(t); 
        return ; 
    }
    for(int i = 0; i < s.length(); i++){
        if(!vis[i]){
            vis[i] = 1; 
            t.push_back(s[i]); 
            dfs(now + 1); 
            t.pop_back(); 
            vis[i] = 0; 
        }
    }
    return ; 
}

int main(){
    cin >> s; 
    dfs(1); 
    for(auto it : G){
        cout << it << endl; 
    }
    return 0; 
}

文件操作

1

#include <bits/stdc++.h>
using namespace std;

int main(){
    ofstream zbkq; 
    zbkq.open("zbkq.txt"); 
    if(zbkq == NULL){
        printf("Error!"); 
        return 0; 
    }
    string s; 
    while(getline(cin, s)){
        zbkq << s << endl; 
    }
    ifstream zbkq1; 
    zbkq1.open("zbkq.txt"); 
    if(zbkq1 == NULL){
        printf("Error!"); 
        return 0; 
    }
    while(zbkq1 >> s){
        cout << s << endl; 
    }
    zbkq.close(); 
    zbkq1.close(); 
    return 0; 
}

2

#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define ll long long

int main(){
    ofstream f1; 
    f1.open("1.txt", ios::app); 
    ifstream f2("2.txt"); 
    if(f1 == NULL || f2 == NULL){
        cout << "Error!" << endl; 
        return 0; 
    }
    string s; 
    while(getline(f2, s)){
        f1 << s << endl; 
    }
    f1.close(); 
    f2.close(); 
    return 0; 
}

3

#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define ll long long

int n;

int main(){
    ofstream F("data.txt", ios::binary); 
    srand(time(0)); 
    cin >> n;  
    for(int i = 1; i <= n; i++){
        int x = rand() % 200; 
        F << x << endl; 
    }
    F << n << endl; 
    F.close();
    return 0; 
}

4

#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define ll long long

int main(){
    ifstream F("data.txt", ios::binary); 
    if(F == NULL){
        cout << "Error!" << endl; 
        return 0; 
    }
    int x; 
    vector <int> G;  
    while(F >> x){
        G.push_back(x); 
    }
    G.pop_back(); 
    sort(G.begin(), G.end()); 
    ofstream F2("sort.txt", ios::binary); 
    for(auto it : G){
        F2 << it << endl; 
    }
    F2.close(); 
    F.close(); 
    
    return 0; 
}

堆栈

1

#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define ll long long

stack <int> stac; 
int n; 

int main(){
    cin >> n; 
    while(n){
        stac.push(n % 2); 
        n >>= 1; 
    }
    while(!stac.empty()){
        cout << stac.top(); 
        stac.pop(); 
    }
    return 0; 
}

2

#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define ll long long

stack <char> stac; 
string s; 

int main(){
    cin >> s; 
    // s = "abcba"; 
    for(int i = 0; i < s.length(); i++){
        stac.push(s[i]); 
    }
    int p = 0; 
    bool flag = 1; 
    while(!stac.empty()){
        if(stac.top() != s[p]){
            flag = 0; 
            break; 
        }
        stac.pop(); 
        p++; 
    }
    if(flag) puts("Yes"); 
    else puts("No"); 
    return 0; 
}

3

#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define ll long long

stack <char> stac; 

int main(){
    string s; 
    cin >> s; 
    // s = "(){{}}[()]"; 
    bool flag = 1; 
    for(int i = 0; i < s.length(); i++){
        if(s[i] == '(' || s[i] == '{' || s[i] == '[')
            stac.push(s[i]); 
        else{
            if(stac.empty()){
                flag = 0; 
                break; 
            }
            else{
                if(s[i] == ')' && stac.top() != '(')flag = 0; 
                if(s[i] == '}' && stac.top() != '{') flag = 0; 
                if(s[i] == '[' && stac.top() != ']') flag = 0; 
                stac.pop(); 
            }
        }
        if(!flag) break; 
    }
    if(!stac.empty()) flag = 0; 
    if(!flag) puts("No"); 
    else puts("Yes"); 
    return 0; 
}

4

#include<bits/stdc++.h> 
#define MAXSIZE 100
using namespace std;
 
int Push(stack <char> &S, char m) {
	S.push(m); 
	return 1;
}
int Pop(stack <char> &S, char &m) {
    if(S.empty()) return 0; 
	m = S.top();
	S.pop();
	return 1;
}
 
char GetTop(stack <char> &S) {
	if(S.empty()) return 0; 
	return S.top();
}
 
double operate(char ch, double x, double y){
	double z;
	switch (ch)
	{
	case '+': z = x + y; break;
	case '-': z = x - y; break;
	case '*': z = x * y; break;
	case '/': z = x / y; break;
	}
	return((char)z);
}
 
int precede(char p1, char p2){ // 求值
	int flag = -2;
	switch (p1){
	case '+':
		if (p2 == '*' || p2 == '/' || p2 == '(') flag = -1;
		else flag = 1;
		break;
	case '-':
		if (p2 == '*' || p2 == '/' || p2 == '(') flag = -1;
		else flag = 1;
		break;
	case '*':
		if (p2 == '(') flag = -1;
		else flag = 1;
		break;
	case '/':
		if (p2 == '(') flag = -1;
		else flag = 1;
		break;
	case '(': if (p2 == ')') flag = 0;
			  else flag = -1;
			  break;
	case ')': 
			  flag = 1;
			  break;
	case '#': 
			  if (p2 == '#')
				  flag = 0;
			  else
				  flag = -1;
		break;
	}
	return(flag);
}
 
double EvaluateExpression(char a[]) { // 求后缀表达式的值
	stack <char> S1, S2;
	double x, y, z;
	char x1, x2;
	char r, ch;
	int I = 0;
	Push(S1, '#');
	r = a[I];
	while (r != '#' || GetTop(S1) != '#'){
		if (r <= '9' && r >= '0'){
			x = 0;
			while (r <= '9' && r >= '0'){
				x = x * 10 + r - '0';
				r = a[++I];
			}
			Push(S2, x);
		}
		else
			switch (precede(GetTop(S1), r)){
			case -1:
				Push(S1, r); 
				r = a[++I]; 
				break; 
			case 0:
				Pop(S1, ch);
				r = a[++I];
				break; 
			case 1:
				Pop(S1, ch); Pop(S2, x1); Pop(S2, x2);
				Push(S2, operate(ch, x2, x1));   
				r = a[I];
				break;
			}
	}
	return S2.top();
}
int main(){
	int length;
	int t = 0;
	char tmp[1000] = "(1+2)*3/(1+2)#"; // 以 # 号作为结尾标识符
	do {
		length = strlen(tmp);
		for (int i = 0; i < length; i++) {
			if (isdigit(tmp[i]) || tmp[i] == '+' 
				|| tmp[i] == '-' || tmp[i] == '*' || tmp[i] == '/' || tmp[i] == '#')
				t = 0; 
			else if (tmp[length - 1] != '#') {
				t = 1; continue;
			}
			else t = 1; continue;
		}
	} while (t == 1);
	if (t == 0) {
		double rst = EvaluateExpression(tmp);
		cout << rst << endl; 
	}
	return 0;
}

5

#include<bits/stdc++.h> 
using namespace std;
#define N 110 

struct node{
    int x, y; 
} ; 
stack <node> stac; 

int a[N][N]; // 0 代表障碍,1代表通路

int sx, sy; // 起点
int tx, ty; // 终点
int n, m; // 迷宫长,宽

int fx[5] = {0, 1, -1, 0, 0}; 
int fy[5] = {0, 0, 0, 1, -1}; 
bool vis[N][N]; // 不走回头路

bool judge(int x, int y){
    if(x < 1 || y < 1 || x > n || y > m || vis[x][y] || a[x][y] == 0) return 0; 
    return 1; 
}

void dfs(int x, int y){
    if(x == tx && y == ty){
        while(!stac.empty()){
            cout << stac.top().x << ", " << stac.top().y << endl;
            stac.pop(); 
        }
        exit(0);  
    }
    vis[x][y] = 1; 
    for(int i = 1; i <= 4; i++){
        int sx = x + fx[i]; 
        int sy = y + fy[i]; 
        if(judge(sx, sy)){
            stac.push((node){sx, sy}); 
            dfs(sx, sy); 
            stac.pop(); 
        }
    }
    return ; 
}

int main(){
    cin >> n >> m; 
    cin >> sx >> sy >> tx >> ty;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            cin >> a[i][j]; 
        }
    }
    stac.push((node){sx, sy}); 
    dfs(sx, sy); 
    return 0; 
}   
posted @ 2023-07-06 14:47  雪之下,树之旁  阅读(118)  评论(0编辑  收藏  举报