day02算法刷题

简介: day02算法刷题

hdu4841圆桌问题

解析:约瑟夫环问题,通过动态数组Vector解决.

#include<iostream>
#include<vector>
using namespace std;
vector<int> table;
int n,m;
int main()
{
  while(cin>>n>>m){
    //1.每次使用要先初清空
    table.clear();  
    // 2.对table进行标号从0--2*n
    for(int i = 0;i < 2*n;i++){
      //table[i] = i;
      table.push_back(i);//这是动态数组! 
    } 
    //3.进行模拟,删除n个坏人 
    int pos = 0;//删除位置  下次删除的位置:(pos+m-1)% table.size()  
    for(int i = 0;i<n;i++){
      pos=(pos+m-1)%table.size();
      table.erase(table.begin()+pos); //进行删除 
    }
    //4.留在table中的都是好人,依次遍历所有的编号,判断进行输出 
    int j = 0;//标记遍历的位置对应table中的位置 
    for(int i = 0;i < 2*n;i++){
      if(i%50==0&&i) {//每五十个字符一行. 排除i=0情况
        cout<<endl;   
      }
      if(i==table[j]&&j<table.size()){//j不能越界. 
        j++;
        cout<<"G";
      }else{
        cout<<"B";
      }
    } 
    cout<<endl<<endl;//空行. 
  }
  return 0;
 } 

hdu1062Text Reverse

解析:入门题,考察字符串使用的几个函数.

方法一:

#include<iostream>
#include<cstring>
using namespace std;
int n,start;
char ch[1000];
int main() {
  //思路分析:
  while(cin>>n) {
    //1. 读取字符串的个数
    //2.getchar()获取末尾 换行符
    getchar();
    while(n--) {
      //3.每次读取一行
      gets(ch);//无需初始化字符串.
      //4.设置两个变量记录小串的起始,结束位置.并倒序输出 /使用栈来解决.
      start = 0;
      int i;
      for(i = 0; i <strlen(ch); i++) {
        if(ch[i]==' ') { //遇到空格,将上一个字符串进行反转
          for(int j = i-1; j>=start; j--) {
            cout<<ch[j];
          }
          cout<<" ";
          start = i+1;//start进行更新
        }
      }
      for(int j = i-1; j>=start; j--) {
        cout<<ch[j];
      }
      cout<<endl;
    }
  }
  return 0;
}

方法二:由于字符串反转,我们可以通过栈来解决.

#include<iostream>
#include<stack>
using namespace std;
int n;
stack<char> stack1;
int main()
{
  while(~scanf("%d",&n)){
    getchar();//拿走结尾的回车
     while(n--){
      while(1){
        char ch = getchar();
        if(ch==' '||ch=='\n'){
          while(!stack1.empty()){
            cout<<stack1.top();
            stack1.pop();
           }
           if(ch=='\n'){//进行下一行. 
            break;
           }
           cout<<" ";//当是 ' '时,输出空格. 
         }else{
          stack1.push(ch);
         }
       }
       cout<<endl; 
     } 
  }
  return 0;
}

C/C++字符串常见函数


getchar():读取一个字符.


gets():功读入一个完整的行,一直读到遇到换行符,并用空字符’\0’取代行尾的换行符’\n’。读入时不需要考虑换行符。 参数是一个字符数组.


getline(cin,str):读入一个字符串(string类型),可以接收空格,遇到回车结束.

相关文章
|
2月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
5月前
|
自然语言处理 算法
算法刷题(二十三):Bigram 分词
算法刷题(二十三):Bigram 分词
42 0
|
5月前
|
算法
算法刷题(二十二):宝石与石头
算法刷题(二十二):宝石与石头
41 0
|
7月前
|
算法 IDE 程序员
【day1】【洛谷算法题】-B2002Hello,World-刷题反思集
【day1】【洛谷算法题】-B2002Hello,World-刷题反思集
|
1天前
|
存储 算法 容器
算法刷题小技巧【持续补充~】
算法刷题小技巧【持续补充~】
8 2
|
6天前
|
算法 安全 定位技术
【刷题】备战蓝桥杯 — dfs 算法
dfs算法在数据较小的情况下可以使用。 一定一定要确定好终止条件,避免栈溢出。 相应做好回溯,保证每次的遍历都是不一样的选择,避免少结果。 针对题目进行对应细节处理,有能力的话可以进行剪枝优化!!!
14 0
|
1月前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
18 0
|
1月前
|
算法
算法系列--链表刷题(二)(上)
算法系列--链表刷题(二)
19 0
|
3月前
|
存储 算法
智能算法 | 刷题的方法真的找到正确思路了嘛
智能算法 | 刷题的方法真的找到正确思路了嘛
|
4月前
|
算法 定位技术
每日刷题|贪心算法初识
每日刷题|贪心算法初识