三道编程 前2道AC,第三道刚一看题,心中窃喜(昨天京东笔试题类似),结果一做,瞬间蒙逼.
1.魔法币(AC)
//思路:倒着想
public class no2 {
public static void main(String[] args) {
Scanner s = new Scanner( System.in );
int x=s.nextInt();
StringBuffer buffer=new StringBuffer( );
while(x!=0)
{
if(x%2==0)
{
x=(x-2)/2;
buffer.append( "2" );
}
else
{
x=(x-1)/2;
buffer.append( "1" );
}
}
System.out.println(buffer.reverse());
}
}
2.字符串碎片(AC)
注意的就是要四舍五入保留两位小数
package 网易校招;
import java.util.Scanner;
/* Created by JackHui on 2017/9/9.*/
public class no1 {
public static void main(String[] args) {
Scanner s=new Scanner( System.in );
double count=0;
double spcount=0;
StringBuffer buffer=new StringBuffer( );
buffer.append( s.nextLine() );
if(buffer.length()!=0) {
for (int j = 0; j < buffer.length() - 1; j++) {
if (buffer.charAt( j ) == buffer.charAt( j + 1 )) {
count++;
} else {
count++;
spcount++;
}
}
count++;
spcount++;
}
double result1=count/spcount;
String result=String.format( "%.2f",result1 );
System.out.println(result);
}
}
3.最长公共子括号序列
大神做法(C++)
分析:
因为长度相同,并且也是合法的括号序列,所以正反括号数跟原来一样。我们考虑在原序列上枚举一个字符,把这个插入到序列的某个位置去,其他序列相对顺序不变,,这样就可以让LCS最大,然后我们判断一下是否合法,丢进set去重就好了。
using namespace std;
string s;
int main() {
cin >> s;
set<string> S;
int len = s.size();
for
(int i =0 ; i < len; i++) {
string w = s.substr(0, i) + s.substr(i +1);
for(int j =0; j < len -1; j++) {
string u = w.substr(0, j) + s[i] + w.substr(j);
int tmp =0;
for(intk =0; k < len; k++) {
tmp += (u[k] =='('?1: -1);
if(tmp <0) {
break; }
}
if(tmp >=0) {
S.insert(u);
}
}
}
cout << (int)S.size() -1<< endl;
return0;
}