第二题比较简单,可惜没来得及做。。
/*
题目描述:
对于一个字符串,定义其复杂度为不同字符的个数。例如,字符串“string”的复杂度为6,字符串“letter”的复杂度为4。
假设你喜欢复杂度为1或者2的字符串。你的朋友给你一个字符串,你通过擦除一些字符,将其变为你喜欢的字符串。请计算最少需要擦除的字符个数,使得最后的字符串的复杂度最多为2。
输入
每次输入含有一条测试。你的程序可能要在不同的输入上运行多遍。输入包含一行字符串,最少有1个,最多有100个小写字符。
输出
一个整数,表示将输入字符串化简到复杂度为1或者2所需要擦除的最少字符个数。
样例输入
string
letter
aaaaaa
uncopyrightable
ambidextrously
assesses
assassins
样例输出
4
2
0
13
12
1
2
*/
#include<iostream> #include<vector> #include<string> #include<sstream> #include<cstring> #include<math.h> using namespace std; int main(){ string ss; int data[26]; while (cin >> ss){ memset(data,0,sizeof(int)*26); int count = 0; for (int i = 0; i < ss.length(); i++) data[ss[i] - 'a']++; for (int i = 0; i < 26;i++) if (data[i]>0) count++; if (count <= 2) cout << 0 << endl; else{ cout << count - 2 << endl; } } system("pause"); return 0; }
#include<iostream>
#include<string>
#include <vector>
#include <iomanip>
#include <cmath>
using namespace std;
double lineth(int x1,int y1,int x2,int y2)
{
double len;
len=sqrt(1.0*(x1-x2)*(x1-x2)+1.0*(y1-y2)*(y1-y2));
return len;
}
int main()
{
int num;
cin>>num;
while (num>0)
{
vector<int> X,Y;
X.resize(num);
Y.resize(num);
for (int i=0;i<num;i++)
{
cin>>X[i]>>Y[i];
}
double minarea=999999,maxarea=0;
double a,b,c,p;
for (int m=0;m<=num-3;m++)
{
for (int n=m+1;n<=num-2;n++)
{
for (int k=n+1;k<=num-1;k++)
{
a=lineth(X[m],Y[m],X[n],Y[n]);
b=lineth(X[m],Y[m],X[k],Y[k]);
c=lineth(X[k],Y[k],X[n],Y[n]);
if ((a+b)<=c||(b+c)<=a||(a+c)<=b)
{
continue;
}
p=(a+b+c)/2;
double nowarea=sqrt(p*(p-a)*(p-b)*(p-c));
//cout<<"now"<<nowarea<<endl;
if (nowarea<minarea)
{
minarea=nowarea;
}
else if (nowarea>maxarea)
{
maxarea=nowarea;
}
}
}
}
if (maxarea==0)
{
maxarea=minarea;
}
cout.fixed;
cout.precision(1);
cout<<minarea<<" ";
cout<<maxarea<<endl;
cin>>num;
}
return 0;
}
我这样写提示输出超限,请问问题出在哪里?谢谢