程序书海码农的世界

蓝杯四十一

2018-02-06  本文已影响7人  逍遥_9353

算法训练 数组查找及替换 

时间限制:1.0s  内存限制:512.0MB

   

问题描述

  给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。元素个数不超过100,b在1至100之间。

输入格式

  第一行为数组元素个数和整数b

  第二行为数组各个元素

输出格式

  按照要求输出

样例输入

7 2

77 11 66 22 44 33 55

样例输出

11 33  55 M

#include<iostream>

#include<algorithm>

#include<string>

#include<cstring>

#include<stack>

#include<queue>

#include<cmath>

using namespace std;

int main() {

    int n, b;

        cin >> n >> b;

    int array[100];

    int temp;

    int num=0;

    for (int i = 0; i < n;i++) {

        cin >> temp;

        if (temp%b!=0) {

            array[num] = temp;

            num++;

        }

    }

    for (int i = 0; i < num;i++) {

        for (int j = 0; j < num-i-1;j++) {//num-i-1再减去1是为了防止越界

            if (array[j]>array[j+1]) {

                int bet;

                bet = array[j];

                array[j] = array[j + 1];

                array[j + 1] = bet;

            }

        }

    }

    for (int i = 0; i < num; i++) {

        if (array[i]>=(int)'A'&&array[i] <= (int)'Z') {

            cout << (char)array[i] << " ";//强制类型转换!

        }

        else {

            cout << array[i] << " ";

        }

    }

    return 0;

}

思路分析:

①定义变量:元素个数,整数,整数数组,记录真正输入的数的个数(初始化为0);

②输入元素个数,整数,数组各个元素;

③for语句循环,if语句(判断在输入的时候就判断是否应该删除);

④冒泡法,for语句双重循环,if语句判断,从小到大排序;

⑤for语句循环,if语句判断并输出。

算法提高 现代诗如蚯蚓 

时间限制:1.0s  内存限制:256.0MB

提交此题   

问题描述

  现代诗如蚯蚓

  断成好几截都不会死

  字符串断成好几截

  有可能完全一样

  请编写程序

  输入字符串

  输出该字符串最多能断成多少截完全一样的子串

输入格式

  一行,一个字符串

输出格式

  一行,一个正整数表示该字符串最多能断成的截数

样例输入

abcabcabcabc

样例输出

4

样例说明

  最多能断成四个”abc”,也就是abc重复四遍便是原串

  同时也能断成两个”abcabc”

  最坏情况是断成一个原串”abcabcabcabc”

数据规模和约定

  字符串长度<=1000

*/

#include <iostream> 

#include <string> 

using namespace std; 

int main() { 

    string s; 

    cin >> s; 

    int len = s.length(); 

    int ans = len; 

  for(int i = 1; i < len/2; i++) { 

        if(len % i != 0) 

            continue; 

        int flag = 0; 

        string t1, t2; 

        t1 = s.substr(0, i); 

        for(int j = i; j < len; j = j + i) { 

            t2 = s.substr(j, i); 

            if(t2 != t1) { 

                flag = 1; 

                break; 

            } 

            t1 = t2; 

        } 

        if(flag == 0) 

            ans = ans < i ? ans : i; 

    } 

    cout << len / ans; 

    return 0; 

思路分析:

①定义变量:一个字符串,循环次数;

②输入一个字符串;

③for语句循环,if语句判断(截成的段数);

④for循环,if语句判断是否相等,if语句判断该字符串最多能断成的截数的三目运算的比较;

⑤输出该字符串最多能断成的截数。

上一篇 下一篇

猜你喜欢

热点阅读