今天参加了hihocoder的·编程练习赛,总共四道,a了前两道,第三题20。
先看题吧。
描述
给定一个真分数P/Q(P < Q),请你求出它的小数部分都包括0~9中的哪些数字。
例如1/2=0.5,只包含数字5;1/3=0.33333……,只包含数字3,1/7=0.142857142857……,包含数字124578。
输入
两个整数P和Q,1 ≤ P < Q ≤ 1000000
输出
从小到大输出小数部分出现的所有数字
样例输入
13 123
样例输出
01569
这题挺简单的,分数都是循环小数。直接做就好了。
#include<bits/stdc++.h>
using namespace std;
int p,q,arr[10] = {0};
int main()
{
cin >> p >> q;
p = p * 10;
int temp = p;
for(int i = 0;i < q - 1;++i)
{
int ans = temp / q;
arr[ans] = 1;
temp = temp % q * 10;
}
for(int i = 0;i < 10;++i)
if(arr[i])
cout << i;
return 0;
}
第二题
描述
愚人节那天,小Ho在小Hi的一个回文字符串中添加了一个字符。你能帮助小Hi找到被添加的是第几个字符吗?
输入
一个只包含小写字母的字符串S。
对于70%的数据,|S| ≤ 1000
对于100%的数据,|S| ≤ 500000
输出
输出一个整数K,表示删除第K(从1开始计数)个字符后,S会变成一个回文字符串。
数据保证有解。如果有多个解,输出其中K最小的。
样例输入
aaba
样例输出
1
这题也不难。直接看代码吧
#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{
cin >> s;
int i = 0,j = s.length() - 1,temp = 0;
while(i < j)
{
if(i > 0)
{
if(s[i] != s[i - 1])
temp = i;
}
if(s[i] != s[j])
break;
++i;
--j;
}
cout << temp + 1;
return 0;
}
感觉前两题比以前的题简单,第三题还没想出,做出了再说吧。