A题Divisible
题目概要:
有一个长度为N的数组,要求你把K的倍数的数除以K,所得到的值输出出来。
数据范围:
1≤N,K≤100
1≤A1<A2<…<AN≤100
样例:
输入
5 2
2 3 6 7 10
输出:
1 3 5
首先,让我们分析一下样例
K=2,可以看出,K的倍数有2,6,10
所以,答案就是2/2,6/2,10/2
又因为这个数组本来就是排好序的,所以就不用再排序了
所以就可以把长度为N的这个数组给他遍历一遍,在遍历的过程中,计算该数值是不是K的倍数,是就除以K得到结果后就把它输出掉,这样子就可以在O(n)的算法下完成任务。
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int a[101];
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]%k==0){
cout<<a[i]/k<<" ";
}
}
return 0;
}
题目概要:
给你一个字符串,要求你把他的不同的子字符串的个数求出来
数据范围:
S的长度不超过100
样例:
输入:
yay
输出:
5
我们先分析一下样例,yay有子串y,a,y,ya,ay,yay,但是有两个y,我们只能用一个,所以就有5个子串
由于要去重,我们应该第一时间想到set(就是一个可以自动去重和排序的东西)
再尝试去把所有的子串算出来就可以了
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
set<string> t;
set<string>::iterator it;
int cnt;
signed main(){
cin>>s;
int n=s.size();
s="#"+s;
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
t.insert(s.substr(i,j-i+1));
}
}
for(it=t.begin();it!=t.end();it++){
cnt++;
}
cout<<cnt;
return 0;
}