有一个长度为32位的二进制数X,对其进行X+1,X+3 操作,并输出。注意不能忽略前导0
输入输出格式
输入描述:
第一行,一个整数T,代表测试数据组数。
接着T行,输入32为二进制数
输出描述:
对每组测试数据,输出两行,第一行为X+1,第二行为X+3.
输入输出样例
输入样例#:
2
00000000000000000000000000000000
00000000000000000000000000000001
输出样例#:
00000000000000000000000000000001
00000000000000000000000000000011
00000000000000000000000000000010
00000000000000000000000000000100
这题一个暴力的方法就是可以先把二进制转换为十进制,分别加一加三后再转换为二进制(得分嘛,不寒掺)。这里借鉴的是大佬的思路,一个Cal函数作为加一计算,carry位作为进一位直接赋值1,相当于刚开始就加一,最后如果进位还有1,那么就在字符串首部加一。
#include<iostream>
using namespace std;
void Cal(string& str) {
int carry = 1;
char c;
for (int i = str.size() - 1; i >= 0; --i) {
c = ((str[i] - '0' + carry) % 2) + '0';
carry = (str[i] - '0' + carry) / 2;
str[i] = c;
}
if(carry)
str = '1' + str;
}
int main()
{
int t;
cin >> t;
string str;
while (t--) {
cin >> str;
Cal(str);
cout << str << endl;
Cal(str);
Cal(str);
cout << str << endl;
}
}
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入输出格式
输入描述:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出描述:
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
输入输出样例
输入样例#:
4
1 2 3 4
2
输出样例#:
2 3
输出一棵完全二叉树的某一层,完全二叉树有公式。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
while (cin >> n) {
vector<int> nums(n+1);
for (int i = 1; i < n+1; i++) {
cin>>nums[i];
}
int d;
cin>>d;
int start = 1 << (d-1);
int end = 1 << d;
if (start > n) {
cout<<"EMPTY"<<endl;
}
else {
for (int i = start; i < min(end-1,n); i++) {
cout<<nums[i]<<" ";
}
cout<<nums[min(end-1, n)]<<endl;
}
}
return 0;
}
设一个正整数既是平方数又是立方数时,称之为Special数。输入包含多组测试用例,第一行输入测试数据的组数,接着在后续每行输入n的时候,请输出1到n中包含的所有Special数的个数。
输入输出格式
输入描述:
输入包含多组测试用例
n(n<= 1000000000)
输出描述:
输入输出样例
输入样例#:
2
1
64
输出样例#:
1
2
一个数既是平方数又是立方数,那么这个数是某个数的六次方。直接暴力遍历。pow(i,6)就是i的六次方的意思。
#include<bits/stdc++.h>
using namespace std;
int main () {
int t;
cin>>t;
while (t--) {
long long n;
cin>>n;
int count = 0;
vector<long long> nums;
for (int i = 1; pow(i,6) <= n; i++) {
count++;
}
cout<<count<<endl;
}
return 0;
}
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。 规则:出牌牌型有5种 [1]一张 如4 则5…9可压过 [2]两张 如44 则55,66,77,…,99可压过 [3]三张 如444 规则如[2] [4]四张 如4444 规则如[2] [5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。
输入输出格式
输入描述:
输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表出的牌。
输出描述:
压过输出YES 否则NO。
输入输出样例
输入样例#:
12233445566677
33
输出样例#:
YES
模拟,一至四张都是相同,从后往前遍历寻找;五章特殊点,在于要连续五章递增1的牌,且第一张大于要压的牌的第一张。
#include<bits/stdc++.h>
using namespace std;
int main() {
string str;
while (cin>>str) {
string s;
cin>>s;
for (int i = str.size()-1; i >= 0; --i) {
if (s.size() == 1) {
if (str[i] > s[0]){
cout<<"YES"<<endl;
return 0;
}
else {
cout<<"NO"<<endl;
return 0;
}
}
else if (s.size() == 2 || s.size() == 3 || s.size() == 4) {
int count = 1;
for (int j = str.size()-2; j>= 0; --j) {
if (str[j] == str[j+1] && str[j] > s[0]) {
count++;
}
else {
count = 1;
}
if (count == s.size()){
cout<<"YES"<<endl;
return 0;
}
}
cout<<"NO"<<endl;
return 0;
}
else if (s.size() == 5) {
int count = 1;
for (int k = str.size()-2; k >= 0; k--) {
if (str[k] == str[k+1]) {
continue;
}
else if (str[k] == str[k+1]-1) {
count++;
}
else {
count = 1;
}
if (count == 5 && str[k] > s[0]) {
cout<<"YES"<<endl;
return 0;
}
}
cout<<"NO"<<endl;
return 0;
}
}
}return 0;
}
有以下三种操作。
(1)COPY l r(0<=l<=r<n),n代表s串的长度。这个表示将s串从l到r的序列复制到剪贴板t里面,覆盖t字符串。
例如s为abcde t为pqr
执行COPY 1 2变为
s为abcde t为bc
(2)CUT l r(0<=l<=r<n),n代表s串的长度。这个表示将s串从l到r的序列剪切到剪贴板t里面(删除s串中的l到r的序列),覆盖t字符串。
例如s为abcde t为pqr
执行CUT 1 2变为
s为ade t为bc
(3)PASTE p(0<=p<n),n代表s串的长度。这个表示将t串插入到s串p位置的后面。t保持不变。
例如s为abcde t为pqr
执行PASTE 1 变为
s为abpqrcde
t为pqr
输入输出格式
输入描述:
多组测试数据。
首先给你s串,再给你一个m,然后给你m个操作。
输出描述:
对每个操作,输出操作后的s串。
输入输出样例
输入样例#:
复制
abcde
5
CUT 1 2
COPY 0 1
PASTE 1
PASTE 1
CUT 1 3
输出样例#:
复制
ade
ade
adade
adadade
aade
s.substr()函数,erase()函数,insert()函数。重点关注一下。
str.push_back('a')
在str结尾插入一个字符’a’
str.insert(str.begin(),'1');
在str头部插入一个字符’1’,可以选择指定位置前面插入任意字符
erase(0, len);
//删除字符串中从索引位置pos开始的len个字符
使用方法 str.erase(0,3)
删除从下标0开始的3个字符 结果为"456789"
erase(s.begin()+i, s.begin()+j)
;//删除字符串中开始第i个到第j个的字符
使用方法 str.erase(s.begin()+2, s.end()-3)
删除从下标2开始到下标-3的所有字符 结果为"12789"
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
int m;
while (cin>>s>>m) {
string t;
while (m--) {
string oper;
cin>>oper;
if (oper == "COPY") {
int l ,r;
cin>>l>>r;
t = s.substr(l, r-l+1);
cout<<s<<endl;
}
else if (oper == "CUT") {
int l, r;
cin>>l>>r;
t = s.substr(l, r-l+1);
s.erase(l, r-l+1);
cout<<s<<endl;
}
else if (oper == "PASTE") {
int p;
cin>>p;
s.insert(p+1, t);
cout<<s<<endl;
}
}
}
return 0;
}