每个人的题目竟然不一样?我编程题目特别简单
信息熵
import java.util.*;
public class Main {
public static double Entropy(String str) {
double H = .0;
int sum = 0;
int[] letter = new int[26];//26个字符
str = str.toUpperCase(); // 将小写字母转换成大写
for (int i = 0; i < str.length(); i++) { // 统计字母个数
char c = str.charAt(i);
if (c >= 'A' && c <= 'Z') {
letter[c - 'A']++;
sum++;
}
}
//计算信息熵,将字母出现的频率作为离散概率值
for (int i = 0; i < 26; i++) {
double p = 1.0 * letter[i] / sum;//单个字母的频率
if (p > 0)
H += -(p * Math.log(p) / Math.log(2));// H = -∑Pi*log2(Pi)
}
return H;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
double H = Entropy(str);
System.out.printf("%4.2f\n", H);
System.out.println();
}
}
}
想问下我得下面为什么没过?哪位帮忙看看?
求自然数分解乘积那道
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Main {
/* 请完成下面这个函数,实现题目要求的功能 */
/* 当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ */
/****************************** 开始写代码 ******************************/
static int run(int numbers,HashMap<Integer, Integer> runInt) {
int res = 1;
int numX = 0;
int numY = 0;
numX = numbers / 2;
numY = numbers - numX;
while (numX == numY || runInt.containsKey(numX) == true || runInt.containsKey(numY) == true) {
numX++;
numY = numbers - numX;
}
if (numbers > numX * numY) {
return numbers;
} else {
runInt.put(numX, 1);
runInt.put(numY, 1);
return run(numX,runInt) * run(numY,runInt);
}
}
/****************************** 结束写代码 ******************************/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
HashMap<Integer, Integer> runInt = new HashMap<Integer, Integer>();
int result = run(num,runInt);
System.out.println(result);
}
}
//数据量不大,水过去了
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
void maxNumCore(bool *visit, int &max, int count, int tempMul
ti, int n)
{
if (count == n)
{
if (tempMulti > max)
max = tempMulti;
}
for (int i = 1; i < n; ++ i)
{
if (!visit[i] && count + i <= n)
{
visit[i] = true;
maxNumCore(visit, max, count + i, tempMulti * i, n);
visit[i] = false;
}
}
}
int maxNum(int n)
{
bool *visit = new bool[n];
for (int i = 0; i < n; ++ i)
{
visit[i] = false;
}
int max = 1;
int tempMulti = 1;
int count = 0;
maxNumCore(visit, max, count, tempMulti, n);
return max;
}
int main()
{
int res;
int n;
cin >> n;
res = maxNum(n);
cout << res << endl;
return 0;
}
去除字符串中的标点符号
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
cin>>str;
string strDes="";
for(int n=0;n<str.length();n++)
{
char cTemp = str.at(n);
if((cTemp>47&&cTemp<58)||(cTemp>64&&cTemp<91)||(cTemp>96&&cTemp<123))
strDes+=cTemp;
}
if(strDes==str)
{
cout<<"Enter a string:"<<endl;
cout<<"No punctuation character in the string?!"<<endl;
}
else
{
cout<<"Enter a string:"<<endl;
cout<<"Result:"<<endl;
cout<<strDes;
}
}
import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Main { /*请完成下面这个函数,实现题目要求的功能*/ /*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ */ /******************************开始写代码******************************/ static int maxProfit(int[] prices, int k) { int n =prices.length-1; int ans =0; int cur = Integer.MIN_VALUE; int[] dp = new int [n+1]; dp[0] =0; boolean outed =false; for(int i=1;i<=n;i++) { dp[i]=Math.max(prices[i]+cur, dp[i-1]); if(i>=k) cur=Math.max(cur, dp[i-k]-prices[i]); else cur=Math.max(cur, -prices[i]); ans=Math.max(ans, dp[i]); } return ans; } /******************************结束写代码******************************/ public static void main(String[] args){ Scanner in = new Scanner(System.in); int res; int _stockPrices_size = 0; _stockPrices_size = Integer.parseInt(in.nextLine().trim()); int[] _stockPrices = new int[_stockPrices_size+1]; int _stockPrices_item; for(int _stockPrices_i = 1; _stockPrices_i <= _stockPrices_size; _stockPrices_i++) { _stockPrices_item = Integer.parseInt(in.nextLine().trim()); _stockPrices[_stockPrices_i] = _stockPrices_item; } int _k; _k = Integer.parseInt(in.nextLine().trim()); res = maxProfit(_stockPrices, _k); System.out.println(String.valueOf(res)); } }
def mutl(ls): result = 1 for item in ls: result *= item return result def compute(n, step): path = [] cursum = 0 for index in range(step, n): if cursum > n: last = path.pop() path.append(path.pop() + n - (cursum - last)) break path.append(index) cursum += index return mutl(path) def my(n): total = [] maxvalue = 0 for step in range(int(n/2)): item = compute(n, step) total.append(item) maxvalue = max(total) return maxvalue n = int(raw_input()) result= my(n) print(result)
第一题,求n分解出的自然数的乘积最大。
def mutl(ls): result = 1 for item in ls: result *= item return result def compute(n, step): path = [] cursum = 0 for index in range(step, n): if cursum > n: last = path.pop() path.append(path.pop() + n - (cursum - last)) break path.append(index) cursum += index return mutl(path) def my(n): total = [] maxvalue = 0 for step in range(int(n/2)): item = compute(n, step) total.append(item) maxvalue = max(total) return maxvalue n = int(raw_input()) result= my(n) print(result)
附加题这个股票,为什么这么简单。。。考试没来得及做。。。好可惜!
int maxProfit(vector < int > stockPrices, int len, int be, int k)
{
if (len <= 0 || k < 1 || be > len-2)
return 0;
int max = 0;
for (int a = be; a < len-1; a++)
{
for (int b = a+1; b < len; b++)
{
int submax = maxProfit(stockPrices, len, b+k, k);
int m = stockPrices[b] - stockPrices[a] + submax;
if (m > max)
max = m;
}
}
return max;
}