Terrorshadow


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

对称平方数

发表于 2019-02-27

##打印所有不超过n(n<256)的,其平方具有对称性质的数。如11*11=121。
正在练练水题,这种题比较困难的是取数的第一位很难取,但是相反取最后一位使用取余运算很好取,于是我们将这个数倒序存放在另一个数中,如果两个数值相同,则print、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Main{
public static void main(String args[]){
int a;
for(int i=1;i<256;i++){
int num=i*i;
int h;
int temp=0;
while(num>0){
h=num%10;
num=num/10;
temp=temp*10+h;
}
if(temp==i*i){
System.out.println(i);
}
}
}
}

这种做法适合回文数,因为确实取一个数的第一位很难,使用循环将数余到第一位,之后也很难判断这个数有几位

win10安装tensorflow

发表于 2018-06-19

win10环境安装tensorflow

网上教程可以参考的很多,不过本篇文章会按照自己的方式一步步来。
第一步,安装python3.5.2
第二步,安装tensorflow,直接使用pip安装,在windows的命令提示符中,将目录切换到安装的python目录下的script文件下,不然会在接下来的提示语法错误。
cd..这个指令的作用是在操作命令指示符中回退上级目录。
输入

1
pip install tensorflow

自己的经验,这一步需要翻墙,不然会不停的报错。

日志

发表于 2018-06-07

简单的日志

##感觉还不够努力吧!
(话说人工智能的东西真多)
期末要复习,还要准备考研,而且这段时间关于OJ题也不想放下,是不是只能拿出自己最好的状态来应付一波了?!???

数学:卡特兰数(Catalan)

发表于 2018-06-07

关于卡特兰数

公式:Cn=(n+1)*C(n,2n),及1,1,2,5,14,42,132,429,1430,4862……一系列数字
复习数据结构时候看到的,就是给你一个数列组合,将数列进栈,让你求有多少出栈的可能性,答案就是这个数了。
详细的看看下面这个好了。
卡特兰数

查看python版本

发表于 2018-05-24

如何查看python版本

####直接在命令行输入

1
python

另,可输入

1
python.exe -m pip install -upgrade pip

进行python版本更新

CCF 201403-1

发表于 2018-05-24

相反的数

问题描述

  有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。

输入格式

  第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
  第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
  只输出一个整数,即这 N 个数中包含多少对相反数。

样例输入

5
1 2 3 -1 -2

样例输出

2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
public class ccf002 {
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int[] a=new int[500];
int x=0;
for(int i=0;i<n;i++){
a[i]=scan.nextInt();
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i!=j&&i>j){
if(a[j]==-a[i])x++;
}
}
}
System.out.println(x);
}
}

CCF 201403-3

发表于 2018-05-24

命令行选项

问题描述
  请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。
  选项有两类:带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如”-a” 或”-b”。而带参数选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相同,后者则是该选项的参数,是由小写字母,数字和减号组成的非空字符串。
  该命令行工具的作者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。这个字符串由若干小写字母和冒号组成,其中的每个小写字母表示一个该程序接受的选项。如果该小写字母后面紧跟了一个冒号,它就表示一个带参数的选项,否则则为不带参数的选项。例如, “ab:m:” 表示该程序接受三种选项,即”-a”(不带参数),”-b”(带参数), 以及”-m”(带参数)。
  命令行工具的作者准备了若干条命令行用以测试你的程序。对于每个命令行,你的工具应当一直向后分析。当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。
输入格式
  输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。
  输入的第二行是一个正整数 N(1 ≤ N ≤ 20),表示你需要处理的命令行的个数。
  接下来有 N 行,每行是一个待处理的命令行,它包括不超过 256 个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。
输出格式
  输出有 N 行。其中第 i 行以”Case i:” 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。
样例输入
albw:x
4
ls -a -l -a documents -b
ls
ls -w 10 -x -w 15
ls -a -b -c -d -e -l
样例输出
Case 1: -a -l
Case 2:
Case 3: -w 15 -x
Case 4: -a -b

Java learning

发表于 2018-05-24

Java learning path

Java

#da

java基础

  • 关键字
  • 标识符
  • 常量(变量)装箱&拆箱
  • 运算符
  • 数组
  • 方法(包括方法定义、重载、参数和返回值)
  • Java三大特性(封装、继承、多态)
  • 反射(反射原理网上文档很多,不截取了)

Jvm

  • Java 详解 JVM 工作原理和流程
  • java中JVM的原理
  • JVM监控工具

集合

  • Collection和Map系列
  • Java集合
  • HashMap

IO

  • JavaIO:操作系统的IO处理过程以及五种网络IO模型(这篇文章我没怎么看懂,先罗列上来)

  • java常见IO流

  • AIO、BIO、NIO

    ​


线程

  • Java多线程
  • Java多线程编程实例
  • JUC

  • 并发包


框架

Spring

  • AOP(核心)
  • 依赖注入(DI)与控制反转(IOC)(核心)
  • 异常统一处理的三种方式与Rest接口异常的处理

SpringMVC

  • Servlet体系结构与ServletContext,ServlectConfig

JAVA对象数组空指针异常

发表于 2018-05-24

java.lang.NullPointerException

在写题过程中遇见问题,创建对象数组之后有空指针异常的错误。
引用某博主的语句

再声明对象数组后 ,必须对每个数组成员进行实例化话 才能直接使用,否则报 空指针异常!

例如:

//创建一个学生类数组; Student [] stu=new Student[5]; //在使用数组成员时 必须进行实例化 stu[i]=new Student();

否则报错

`Exception in thread “main” java.lang.NullPointerException
at Test.main(Test.java:10)

`

附加小彩蛋,如果某对象数组两个值前后分别指向一个实例化对象,并且在过程中这个对象值发生改变,这数组中两个成员的值还是这个实例化对象改变后的值。
例:
public class Test { public static void main(String[] args) { A[] as=new A[10]; A am=new A(5,2); A ac=new A(4,3); as[0]=am; am.a=7; am.b=8; as[1]=am; // as[2].a=73; // as[2].a=671;/*这两句会报错异常*/ System.out.println(as[0].a+" "+as[0].b); System.out.println(as[1].a+" "+as[1].b); } } class A{ int a; int b; A(int a,int b){ this.a=a; this.b=b; } A(){} }
输出结果:
7 8
7 8

POJ 1002

发表于 2018-05-24

poj 1002题

OUTPUT:

输入值为: TEL number
输出值为: TEL tel.frequence

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
#include<stdlib.h>
#include<cstring>
using namespace std;
int main(){
int num;
string str="ITSEASY";
string st;
int n=0;
int i=0;
int j=0;
for(i=0,j=0;i<str.length();i++){
if(str[i]=='-'){}
else if(str[i]>='A'&&str[i]<='Z'){
if(str[i]<='P'){
st+=(str[i]-'A')/3+2+'0';
j++;}
else if(str[i]>='P'){
st+=(str[i]-'A'-1)/3+2+'0';
j++;
}
}else if(str[i]>='0'&&str[i]<='9'){
st+=str[i];
j++;
}
}
cout<<st<<endl;
}

完成了基本的读取,剩下的很容易。当然这里题目给挖了个坑,我也是深陷不能自拔,数据中没有Q这个映射关系
下面写一个正确答案,但是答案提示是Time Limit Exceeded

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include<iostream>
#include<string>
#define MAX 100000
using namespace std;
int main(){
int num;
string str;
string st;
int n=0;
int i=0;
int j=0;
int k=0;
int m=0;
cin>>n;
string s[MAX];
string t[MAX],q[MAX];
int freq[MAX];
while(k<n){
cin>>str;
for(i=0,j=0;i<str.length();i++){
if(j==3) {
st+='-';
j++;}
if(str[i]=='-'){
}else if(str[i]>='A'&&str[i]<='Z'){
if(str[i]<='P'){
st+=(str[i]-'A')/3+2+'0';
j++;
}else if(str[i]>='P'){
st+=(str[i]-'A'-1)/3+2+'0';
j++;
}
}else if(str[i]>='0'&&str[i]<='9'){
st+=str[i];
j++;
}
}
s[k]=st;
str.clear();
st.clear();
k++;
}
t[0]=s[0];
k=1;
freq[0]=1;
for(i=1;i<n;i++){
for(j=0;j<k+1;j++){
if(s[i]==t[j]){
freq[j]+=1;
break;
}else if(j==k){
k++;
t[k]=s[i];
freq[k]=1;
m++;
break;
}
}
}
int z=0;
for(j=0;j<=k;j++){
if(freq[j]>=2){
q[z]=t[j];
q[z]+=' ';
q[z]+=(freq[j]+'0');
z++;
}
}
for(i=0;i<z;i++){
for(j=0;j<z-i;j++){
if(q[j]>q[j+1]){
string temp=q[j];
q[j]=q[j+1];
q[j+1]=temp;
}
}
}
for(j=0;j<=z;j++){
cout<<q[j]<<endl;
}
}

这段答案始于我忘记题设中有排序这个问题,加上排序之后导致程序冗长而且超出时间限制.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include<iostream>
#include<string>
#define MAX 100000
using namespace std;
void Qsort(string a[],int low,int high){
if(low>=high){
return;
}
int first=low;
int last=high;
string key=a[first];
while(first<last){
while(first<last&&a[last]>key){
--last;
}
a[first]=a[last];
while(first<last&&a[first]<=key){
++first;
}
a[last]=a[first];
}
a[first]=key;
Qsort(a,low,first-1);
Qsort(a,first+1,high);
}
int main(){
int num;
string str;
string st;
int n=0;
int i=0;
int j=0;
int k=0;
int m=0;
cin>>n;
string s[MAX];
string t[MAX],q[MAX];
int freq[MAX];
while(k<n){
cin>>str;
for(i=0,j=0;i<str.length();i++){
if(j==3) {
st+='-';
j++;}
if(str[i]=='-'){
}else if(str[i]>='A'&&str[i]<='Z'){
if(str[i]<='P'){
st+=(str[i]-'A')/3+2+'0';
j++;
}else if(str[i]>='P'){
st+=(str[i]-'A'-1)/3+2+'0';
j++;
}
}else if(str[i]>='0'&&str[i]<='9'){
st+=str[i];
j++;
}
}
s[k]=st;
str.clear();
st.clear();
k++;
}
t[0]=s[0];
k=1;
freq[0]=1;
for(i=1;i<n;i++){
for(j=0;j<k+1;j++){
if(s[i]==t[j]){
freq[j]+=1;
break;
}else if(j==k){
k++;
t[k]=s[i];
freq[k]=1;
m++;
break;
}
}
}
int z=0;
for(j=0;j<=k;j++){
if(freq[j]>=2){
q[z]=t[j];
q[z]+=' ';
q[z]+=(freq[j]+'0');
z++;
}
}
Qsort(q,0,z);
for(j=0;j<=z;j++){
cout<<q[j]<<endl;
}
}

用快速排序对程序进行缩减,然而并不能解决之前的问题。
关于这个问题我想不继续去续写了,关于本题有几点内容需要反思和思考:
1.C++的操作不熟练,在本机编译成功而提交上去之后编译失败因为自己对C版本认识欠缺。
2.审题问题,关于题中Q,以及本身缺失排序导致结果错误。
3.全程使用字符串操作,不可避免的使数据量上升之后导致超时。
4.多余变量设置复杂。
在参考了网上诸多答案之后,以及向各位大神请教,对代码的改进方案有些许认识:
1.使用整形变量进行操作,可以提高运算效率。
2.使用一个新建的函数完成A-Y的映射关系。
3.将整个算法设计思路明确之后进行计算。。
现阶段还不是很成熟,慢慢去练吧。

1234

Mark Zhang

33 日志
© 2020 Mark Zhang
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4