作者:鲸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++ 算法题解:打印沙漏、素数对猜想、数组元素循环右移问题...相关推荐

  1. PTA 乙级 【1008】 数组元素循环右移问题

    PTA 乙级 [1008] 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置).如果 ...

  2. 7-2 数组元素循环右移问题 (40 分)

    ** 7-2 数组元素循环右移问题 (40 分) ** 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ⋯ ...

  3. PAT (Basic Level) Practice1008 数组元素循环右移问题

    1008 数组元素循环右移问题 一.题目 一个数组A中存有N(>0)N(>0)N(>0)个整数,在不允许使用另外数组的前 提下,将每个整数循环向右移M(≥0)M(≥0)M(≥0)个位 ...

  4. 7-1 数组元素循环右移问题 (20 分)

    7-1 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A​1 ⋯A​N−1​​ ...

  5. C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

    1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ...

  6. 浙江大学PAT上机题解析之1008. 数组元素循环右移问题 (20)

    1008. 数组元素循环右移问题 (20) 时间限制  400 ms 内存限制  32000 kB 代码长度限制  8000 B 判题程序    Standard 一个数组A中存有N(N>0)个 ...

  7. 1008 数组元素循环右移问题(C语言)

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...

  8. PATB 1008 数组元素循环右移问题

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...

  9. java 数组元素依次右移,将数组元素循环右移k个位置(Java实现)

    用四种方法实现了将数组元素循环右移k个位置,相关的解释作为注释放在代码里面了. package movearrayelement; import java.util.BitSet; public cl ...

最新文章

  1. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自己主动适应宽带高度...
  2. 藏獒当初为何成为“神话”,如今是谁毁了昔日藏獒的神话?
  3. View 4桌面虚拟化炙手可热 但未熟透
  4. SiamMask:视频跟踪最高精度 (中科院王强大神作品)
  5. 物联网对石油燃气行业的作用
  6. Asp.net常用的51个代码(非常实用)
  7. java中带包的类在命令行中的编译和执行中出现的问题及解决办法
  8. MyBatis官方文档——XML配置部分
  9. 抖音代码舞Python制作
  10. windows下的Zcash钱包(ZEC钱包)-zcash4win 1.0.12
  11. 每秒浮点运算次数FLOPS
  12. python调用图灵机器人实现微信公众号的自动回复功能(下)
  13. 小学计算机课题研究报告,小学信息技术自主学习方法探究研究课题研究报告
  14. matlab正弦波占空比怎么调,matlab实现可调节占空比的方波
  15. R语言 指定列缺失值定值填充
  16. AnkhSvn 在vs2015中没有起到作用问题
  17. mac 批量文件编码格式转换
  18. 计算机房验收标准,机房标准工程验收标准和方法.doc
  19. 中国联通广州软件研究院 软件开发岗一面(人力面)
  20. 用nero刻录时收到错误信息:please ask your administrator to install 'Nero BurnRight'

热门文章

  1. 添加谷歌翻译到你的网站
  2. C 语言实例 - 输出九九乘法口诀表
  3. 通过这个免费的,由23部分组成的互动课程,学习ES6 +
  4. 在伦敦逛菜市场_我在伦敦进行岗后求职的经验教训
  5. Git #1 - 安装git bash
  6. 用 Python 下载抖音无水印视频
  7. HTML/CSS进阶
  8. Shell脚本语法2
  9. python实现TCP客户端从服务器下载文件
  10. Python浅谈gevent实现协程