提交 e434a100 编写于 作者: 每日一练社区's avatar 每日一练社区

update algorithm exercises

上级 afd09fe6
#### 题目描述
一个字符串的非空子串是指字符串中长度至少为1 的连续的一段字符组成的串。
例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共7 个。
注意在计算时,只算本质不同的串的个数。
请问,字符串```0100110001010001```有多少个不同的非空子串?
#include <bits/stdc++.h>
using namespace std;
int main(){
set<string> s;
string str;
cin >> str;
for(int i = 0; i < str.size(); i ++)
for(int j = i; j < str.size(); j ++)
s.insert(str.substr(i, j - i + 1));
cout << s.size();
return 0;
}
\ No newline at end of file
public class Demo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
sc.close();
Set<String> set = new HashSet<String>();
for (int i = 0; i < str.length() + 1; i++) {
for (int j = i + 1; j < str.length() + 1; j++) {
set.add(str.substring(i, j));
}
}
System.out.println(set.size());
}
}
如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?
```
5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211
```
\ No newline at end of file
#include<iostream>
using namespace std;
int main(){
int count2=0,count5=0;
int num;
for(int i=0;i<100;i++){
cin>>num;
while(num%5==0){
count5++;
num/=5;
}
while(num%2==0){
count2++;
num/=2;
}
}
int ans=count2<count5?count2:count5;
cout<<ans;
return 0;
}
import java.math.BigInteger;//输入的时候,记住要一行输所有的100个数字,
//并且每个数字之间要空一格,只能空一格,这样才能计算出答案。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String s;
BigInteger a, b;
Scanner cin = new Scanner(System.in);
s = cin.nextLine();
String[] num = s.split(" ");
BigInteger ans = new BigInteger("1");
for (int i = 0; i < num.length; i++) {
ans = ans.multiply(BigInteger.valueOf(Integer.valueOf(num[i])));
}
System.out.println(ans);
}
}
\ No newline at end of file
给定 N 个整数 A1,A2,…AN。
请你从中选出 K 个数,使其乘积最大。
请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009 的余数。
注意,如果 X<0, 我们定义 X 除以 1000000009 的余数是负(−X)除以 1000000009 的余数,即:0−((0−x)%1000000009)
#### 输入格式
第一行包含两个整数 N 和 K。
以下 N 行每行一个整数 Ai。
#### 输出格式
输出一个整数,表示答案。
#### 数据范围
```
1≤K≤N≤105,
−105≤Ai≤105
```
#### 输入样例1:
```
5 3
-100000
-10000
2
100000
10000
```
#### 输出样例1:
```
999100009
```
#### 输入样例2:
```
5 3
-100000
-100000
-2
-100000
-100000
#### 输出样例2:
-999999829
```
\ No newline at end of file
#include<iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main(){
int n,k;
long long ans;
cin>>n>>k;
vector<long long>num;
for(int i=0;i<n;i++){
int temp;
cin>>temp;
num.push_back(temp);
}
sort(num.begin(),num.end());
if(k%2!=0){
ans=num.back();
k=k-1;
num.pop_back();
}
else
ans=1;
while(k>0){
if((num[0]*num[1])>num.at(num.size()-1)*num.at(num.size()-2)){
ans=ans*num[0]*num[1]%1000000009;
num.erase(num.begin(),num.begin()+1);
}
else{
ans=ans*num.at(num.size()-1)*num.at(num.size()-2)%1000000009;
num.pop_back();
num.pop_back();
}
k-=2;
}
cout<<ans;
return 0;
}
import java.util.Scanner;
import java.math.*;
public class Main {
private static String s;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n, k;
n = cin.nextInt();
k = cin.nextInt();
s = cin.next();// 不读回车和空格的方式读入
BigDecimal sum = dfs(k, n - 1);
System.out.println(sum);
}
// id是乘号的序号(从左到右1~k);
// dfs(id,r)表示:第id号乘号安放在在第r个空(一共n-1个空)时的最大值
static BigDecimal dfs(int id, int r) {
if (id == 1) {// 安放最后一个(递归概念1号就是递归出口)
BigDecimal sum = BigDecimal.valueOf(0);
for (int i = r; i >= 1; i--) {
BigDecimal x = BigDecimal.valueOf(0);
BigDecimal y = BigDecimal.valueOf(0);
for (int k1 = 0; k1 <= i - 1; k1++) {
char c = s.charAt(k1);
x = x.multiply(BigDecimal.valueOf(10)).add(BigDecimal.valueOf(Integer.parseInt(String.valueOf(c))));
}
for (int k2 = i; k2 <= r; k2++) {
char c = s.charAt(k2);
y = y.multiply(BigDecimal.valueOf(10)).add(BigDecimal.valueOf(Integer.parseInt(String.valueOf(c))));
}
sum = sum.max(x.multiply(y));
}
return sum;
}
BigDecimal maxn = BigDecimal.valueOf(0);
for (int i = r; i >= id; i--) {
BigDecimal temp = dfs(id - 1, i - 1);
BigDecimal tt = BigDecimal.valueOf(0);
for (int kk = i; kk <= r; kk++) {
char c = s.charAt(kk);
tt = tt.multiply(BigDecimal.valueOf(10)).add(BigDecimal.valueOf(Integer.parseInt(String.valueOf(c))));
}
maxn = maxn.max(tt.multiply(temp));
}
return maxn;
}
}
\ No newline at end of file
```
   B    DEF
A + —- + ——–- = 10
   C    GHI
```
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
\ No newline at end of file
#include<stdio.h>
#include<stdbool.h>
int ans = 0;
int nums[10];
bool visited[10];
void judge()
{
int i;
if (nums[0] + (double)nums[1]/nums[2] + (double)(nums[3] *100 + nums[4]* 10 + nums[5])/(nums[6]*100 + nums[7]*10 + nums[8]) == 10)
{
printf("%d + %d/%d + %d%d%d/%d%d%d",nums[0],nums[1],nums[2],nums[3],nums[4],nums[5],nums[6],nums[7],nums[8]);
printf("\n");
ans++;
}
}
void dfs(int index)
{
if(index >= 9)
{
judge();
return ;
}
int i;
for(i=1;i<10;i++)
{
if(visited[i] == false)
{
visited[i] = true;
nums[index] = i;
dfs(index + 1);
visited[i] = false;
}
}
}
int main()
{
dfs(0);
printf("%d\n",ans);
return 0;
}
public class SuanShiJieFa {
static int num = 0;
public static void f1(int a[], int k) {
double q;
double w;
double e;
if (k == a.length - 1) {
q = a[0];
w = a[1] * 1.00 / a[2];
e = (a[3] * 100 + a[4] * 10 + a[5]) * 1.00 / (a[6] * 100 + a[7] * 10 + a[8]);
if (q + w + e == 10) {
num++;
}
}
for (int i = k; i < a.length; i++) {
{
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
f1(a, k + 1);
{
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
public static void main(String[] args) {
int a[] = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
f1(a, 0);
System.out.println(num);
}
}
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册