蓝杯四十一
算法训练 数组查找及替换
时间限制: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语句判断该字符串最多能断成的截数的三目运算的比较;
⑤输出该字符串最多能断成的截数。