c++string转char数组_C++ 算法题解:打印沙漏、素数对猜想、数组元素循环右移问题...
作者:鲸90830
链接:https://www.cnblogs.com/whale90830/p/10688802.html
DS_起步自测
中国大学MOOC_陈越、何钦铭_数据结构_起步能力自测题
1、打印沙漏
思路:先用一个循环计算出有多少行,最长行有多少个符号,这里计算时直接用N去减,可以得到剩余的符号数;后面直接用计算得到的行数和每行多少个去打印图形
#includeusing namespace std;int main(){ int n; char symbol; cin >> n >> symbol;
if (n 1) return 0; n = n - 1; int max_row = 1; int row_num = 0; while(n >= 0){ if (n - 2 * (max_row + 2) 0) break; max_row += 2; ++row_num; n -= max_row * 2; } for (int i = 0; i for (int j = 0; j cout <" "; } for (int j = 0; j 2 * i; j++){ cout < } cout <endl; } for (int i = row_num; i >= 0; i--){ for (int j = 0; j cout <" "; } for (int j = 0; j 2 * i; j++){ cout < } cout <endl; } cout < return 0;}
2、素数对猜想
思路:判断素数的函数直接默写;因为判断相邻素数,直接用一个变量记录上一个素数,再与新得到的素数比较
#includeusing namespace std;bool isPrime(int num){ if (num == 0 || num == 1) return false; for (int i = 2; i * i <= num; i++){ if (num % i == 0) return false; } return true;}int main(){ int n; cin >> n; int count = 0; int lastPrime = 2; for (int i = 3; i <= n; i++){ if (isPrime(i)){ if (i - lastPrime == 2) ++count; lastPrime = i; } } cout < return 0;}
3、数组元素循环右移问题
思路:
如果移动未知数比数组大小还要大,说明移动了超过一个循环,实际位置变化应为 (移动位置数%数组大小),这样处理后可保证移动位置数小于数组大小。
输出时先输出后m-1个数,再输出前面部分,为保证末尾没有多余空格,中间点单独输出。这样操作只是按移动后的顺序输出,但实际并没有去交换数据,数组里的数据顺序并没有变,虽然可以通过,但不知道是不是简化了题意。
#includeusing namespace std;int main(){ int n, m; cin >> n >> m; m = m % n; int *data = new int[n]; for (int i = 0; i cin >> data[i]; } for (int i = n - m; i cout <" "; } for (int i = 0; i 1; i++){ cout <" "; } cout <-1] <endl; return 0;}
4、Have Fun with Numbers
思路:
最长可能输入20位整数,long long也有可能会溢出,只能用字符串处理。
注意string的每一位是一个char,做计算注意-'0'
自己实现计算,准备一个进位项,由于只做翻倍,可简单判断此位>5进位项为1,否则为0
由于翻倍后可能位数+1,预设翻倍后的char数组时按+1大小来开,计算结束后,通过判断最高位,将正确的char赋到字符串中去,后面用字符串来处理
判断是否是原数的数字调换顺序,只要组成两个数的数字个数都对应即可确定。
#include#include#includeusing namespace std;int main(){ string ori_num; cin >> ori_num; bool isPermutation = true; int ori_bitnum[10] = {0}; char *double_num = new char[ori_num.length()+1]; if (ori_num[0] >= '5') isPermutation = false; char carry = '0'; for (int i = ori_num.length(); i > 0; i--){ double_num[i] = (ori_num[i-1] - '0') * 2 % 10 + carry; carry = ori_num[i-1] '5'? '0': '1'; ++ori_bitnum[ori_num[i-1]-'0']; } double_num[0] = carry; string double_numstr = carry != '0'? double_num: double_num + 1; if(isPermutation){ int double_bitnum[10] = {0}; for (int i = 0; i 1; i++){ ++double_bitnum[double_numstr[i]-'0']; } for (int i = 0; i 10; i++){ if (ori_bitnum[i] != double_bitnum[i]){ isPermutation = false; break; } } } printf("%s\n",isPermutation? "Yes": "No"); cout < return 0;}
5、Shuffling Machine
思路:多开一个数组,按给定的顺序将原数组的卡片内容赋过去,如果多次操作,就将新的数组搬运到原数组中去。
#include#includeusing namespace std;string cards[54];string new_cards[54];void copyCards(){ for (int i = 0; i 54; i++){ cards[i] = new_cards[i]; }}int main(){ for (int i = 0; i 54; i++){ if (i 13){ cards[i] = "S"; cards[i].append(to_string(i+1)); }else if (i 26){ cards[i] = "H"; cards[i].append(to_string(i-12)); }else if (i 39){ cards[i] = "C"; cards[i].append(to_string(i-25)); }else if (i 52){ cards[i] = "D"; cards[i].append(to_string(i-38)); }else{ cards[i] = "J"; cards[i].append(to_string(i-51)); } } int k; cin >> k; int order[54]; for (int i = 0; i 54; i++){ cin >> order[i]; } for (int j = 0; j for (int i = 0; i 54; i++){ new_cards[order[i]-1] = cards[i]; } copyCards(); } for (int i = 0; i 53; i++){ cout <" "; } cout <53]; return 0;}
●编号482,输入编号直达本文
●输入m获取文章目录
C语言与C++编程
分享C/C++技术文章
c++string转char数组_C++ 算法题解:打印沙漏、素数对猜想、数组元素循环右移问题...相关推荐
- PTA 乙级 【1008】 数组元素循环右移问题
PTA 乙级 [1008] 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置).如果 ...
- 7-2 数组元素循环右移问题 (40 分)
** 7-2 数组元素循环右移问题 (40 分) ** 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ⋯ ...
- PAT (Basic Level) Practice1008 数组元素循环右移问题
1008 数组元素循环右移问题 一.题目 一个数组A中存有N(>0)N(>0)N(>0)个整数,在不允许使用另外数组的前 提下,将每个整数循环向右移M(≥0)M(≥0)M(≥0)个位 ...
- 7-1 数组元素循环右移问题 (20 分)
7-1 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1 ⋯AN−1 ...
- C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)
1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ...
- 浙江大学PAT上机题解析之1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个 ...
- 1008 数组元素循环右移问题(C语言)
1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...
- PATB 1008 数组元素循环右移问题
1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...
- java 数组元素依次右移,将数组元素循环右移k个位置(Java实现)
用四种方法实现了将数组元素循环右移k个位置,相关的解释作为注释放在代码里面了. package movearrayelement; import java.util.BitSet; public cl ...
最新文章
- 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自己主动适应宽带高度...
- 藏獒当初为何成为“神话”,如今是谁毁了昔日藏獒的神话?
- View 4桌面虚拟化炙手可热 但未熟透
- SiamMask:视频跟踪最高精度 (中科院王强大神作品)
- 物联网对石油燃气行业的作用
- Asp.net常用的51个代码(非常实用)
- java中带包的类在命令行中的编译和执行中出现的问题及解决办法
- MyBatis官方文档——XML配置部分
- 抖音代码舞Python制作
- windows下的Zcash钱包(ZEC钱包)-zcash4win 1.0.12
- 每秒浮点运算次数FLOPS
- python调用图灵机器人实现微信公众号的自动回复功能(下)
- 小学计算机课题研究报告,小学信息技术自主学习方法探究研究课题研究报告
- matlab正弦波占空比怎么调,matlab实现可调节占空比的方波
- R语言 指定列缺失值定值填充
- AnkhSvn 在vs2015中没有起到作用问题
- mac 批量文件编码格式转换
- 计算机房验收标准,机房标准工程验收标准和方法.doc
- 中国联通广州软件研究院 软件开发岗一面(人力面)
- 用nero刻录时收到错误信息:please ask your administrator to install 'Nero BurnRight'