^^g码卡巴卡g^^ 2025-01-29 12:16 采纳率: 80%
浏览 12
已结题

#3010. 取扑克牌

有N(N<=1000)张扑克牌放成一堆,每次从上面取一张牌翻开,再从上面取一张牌放到这堆牌的下面。也就是从上面奇数次取到的牌翻开放成一排,偶数次取到的牌放在下面直到取完。 输入N张扑克牌的排满数字,输出翻开的情况。比如,N=4,牌面从上到下依次是1 2 3 4,那么翻开牌面的情况为1 3 2 4。

输入格式
第一行是一个整数N(N<=1000),第二行是N个整数,代表从上到下的牌面数。

输出格式
按照翻开牌面的顺序,输出翻开的结果,数字之间用一个空格隔开。

输入数据 1
4
1 2 3 4
输出数据 1
1 3 2 4
我的代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    queue<int> st;
    queue<int> sta;
    int a[1005];
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(i%2){
            st.push(a[i]);
        }else{
            sta.push(a[i]);
        }
    }
    for(int i=1;i<=st.size();i++){
        cout<<st.front()<<' ';
        st.pop();
    }for(int i=1;i<=sta.size();i++){
        cout<<sta.front()<<' ';
        sta.pop();
    }
    return 0;
}

各位看看哪错了,谢谢

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-01-29 12:25
    关注

    中午好🌞🌞🌞
    本答案参考通义千问

    你的代码存在几个问题:

    1. 队列使用错误:你使用了两个队列 ststa 来分别存储奇数和偶数次取出的牌,但实际上应该只用一个队列来存储所有的牌,然后按照规则处理。
    2. 队列大小获取方式错误:你不能直接使用 st.size()sta.size() 进行循环,因为队列的大小会随着元素的弹出而变化。

    下面是修正后的代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        
        vector<int> cards(n);
        for (int i = 0; i < n; i++) {
            cin >> cards[i];
        }
    
        queue<int> cardQueue;
        for (int i = 0; i < n; i++) {
            cardQueue.push(cards[i]);
        }
    
        vector<int> result;
        while (!cardQueue.empty()) {
            // 取出奇数次的牌
            result.push_back(cardQueue.front());
            cardQueue.pop();
    
            if (!cardQueue.empty()) {
                // 将偶数次的牌移到队列尾部
                int temp = cardQueue.front();
                cardQueue.pop();
                cardQueue.push(temp);
            }
        }
    
        // 输出结果
        for (int i = 0; i < result.size(); i++) {
            cout << result[i] << " ";
        }
        cout << endl;
    
        return 0;
    }
    

    解释:

    1. 读取输入:读取牌的数量 n,然后读取每张牌的值存入 cards 数组中。
    2. 初始化队列:将所有牌放入一个队列 cardQueue 中。
    3. 处理队列
      • 使用一个循环遍历队列,每次取出奇数次的牌加入结果数组 result
      • 如果队列不为空,则取出下一个牌并将其重新放回队列尾部,以处理偶数次的牌。
    4. 输出结果:将结果数组中的牌按顺序输出。

    这样可以确保按照题目要求正确地处理和输出牌的顺序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月29日