lmx120628 2023-07-24 22:44 采纳率: 60%
浏览 46
已结题

c++语言堆栈计算机

堆栈计算机

时间限制: 1.000 Sec 内存限制: 128 MB Special Judge
题目描述
有一种新型的堆栈计算机,计算机的内存是一个初始为空的数列,计算机支持三种操作:
• 1 - 将整数 1 放入数列的尾部。任意时刻都可执行此操作。
• dup - 将数列尾部的数字复制一份,放入数列尾部。只有数列非空时才能执行此操作。
• add - 取出 (并删除) 数列尾部的两个数字,相加后放回数列的尾部。只有数列中至少有两个数字时才能执行此操作。
给定一个正整数 n,你需要输出一个长度不超过 200 的程序 (操作的序列),它在执行结束后,恰好得到一个长度为1 的数列,并且数列中的数字恰好为 n。下图展示了一个最终得到 8 的程序。

img

输入
输入一行一个正整数 n,表示希望输出的数字。
输出
输出一个若干行 (不超过 200 行,否则判为不正确) 的满足上述要求的程序。如有多种方案,输出任意一种即可。注意“dup”和“add”均为小写。
样例
输入1
1
输出1
1
输入2
8
输出2
1
1
add
dup
add
dup
add
提示
数据规模
对于 60% 的测试数据,有 n ≤ 104。
对于 100% 的测试数据,有 1 ≤ n ≤ 109。

  • 写回答

3条回答 默认 最新

  • 爱编程的小芒果 2023-07-24 22:54
    关注

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,k,a[100005];
    int main()
    {
        cin>>n;
        int cnt=0;
        for(int i=29;i>=0;i--){
            if(n&(1<<i)){
                cout<<"1"<<endl;
                for(int j=0;j<i;j++) printf("dup\nadd\n");
                if(cnt) printf("add\n");
                cnt++;
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 创建了问题 7月24日