题意:问加多少次可以把尾数变为0;
思路:(10-n%10)%10 可以直接求出结果
代码:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<(10-n%10)%10;
return 0;
}
二.题目链接
题意:统计前i位数有多少是9的倍数;
思路:暴力(由于数据范围过大,可以使用字符串存储)
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
string s;
cin >> s;
vector<int>a(s.length());
a[0] = s[0] - '0';
for (int i = 1; i < s.length(); i++)
{
a[i] = a[i - 1] + (s[i] - '0');
}
int cnt = 0;
for (int i = 0; i < s.length(); i++)
{
if (a[i] % 9 == 0)
cnt++;
}
cout << cnt;
return 0;
}
三.题目链接
题意:产生k个回文串,且总字符数为n;
思路:a,b,c每三个循环一次,k>0,则输出双倍字符且n减去两个字符,k=0后则正常循环
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int flag = 0;
while (n--)
{
char s = 'a' + flag;
if (k > 0)
{
cout << s << s;
k--;
n--;
}
else
cout << s;
flag++;
if (flag == 3)
flag = 0;
}
return 0;
}
题意:每相邻的两个数之间的差值要小于等于k,不满足条件可以插入新的数据
思路:第一种情况就是相邻的两个数满足条件,可以省略。第二种情况所有的差值都小于k,此时我们要插入一个新的数在末端,使得其等于k。第三种情况是,差值很大是k好多倍,用k来分割该数据,分割成(b[i]+k-1) / k - 1份。
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<long long>a(n);
vector<long long>b(n);
b[0] = 0;
long long cnt = 0;
long long flag = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
if (i > 0)
b[i] =abs( a[i] - a[i - 1]);
if (b[i] > k)
{
cnt = cnt + (b[i]+k-1) / k - 1;
flag++;
}
if (b[i] == k)
flag++;
}
if (!flag)
cnt++;
cout << cnt;
return 0;
}