import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test1 {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd EEEE");
Calendar cal = Calendar.getInstance();
for(int i=1;i<100;i++){
cal.set(1999+100*i, 11, 31);
Date date = cal.getTime();
System.out.println(df.format(date));
}
}
}
public class test2 {
public static void main(String[] args) {
int sum =0;
for(int a=1;a<=9;a++)
for(int b=1;b<=9;b++)
for(int c=1;c<=9;c++)
for(int d=1;d<=9;d++)
for(int e=1;e<=9;e++)
{
if((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e))
if(a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d &&c!=e && d!=e)
sum++;
}
System.out.println(sum);
}
}
public class test3 {
public static void main(String[] args) {
int[][] a = new int[5][5];
for(int i=0;i<=3;i++)
for(int j=0;j<=4;j++)
a[i][j]=1;
for(int i=1;i<=3;i++)
for(int j=1;j<=4;j++)
a[i][j]=a[i-1][j]+a[i][j-1];
System.out.println(a[3][4]);
}
}
//用斐波纳契数列和模拟手算除法实现
//黄金分割数实际上是相邻的两个斐波那契数的商
import java.math.BigInteger;
public class test4 {
public static void main(String[] args) {
BigInteger firstNum = BigInteger.ONE; //1
BigInteger secNum = BigInteger.ONE;
BigInteger res = BigInteger.ZERO; //0
BigInteger TEN = BigInteger.TEN; //10
//BigInteger的斐波那契数列
for (int i = 0; i < 50000; i++) {
if (i == 0 || i == 1) {
res = BigInteger.ONE;
}
res = secNum.add(firstNum); //两个BigInteger相加
firstNum = secNum;
secNum = res;
}
//for循环实现了模拟手算除法
for (int i = 0; i < 101; i++) {
//选择斐波那契里两个连续的数,小的做被除数,大的做除数
//每一位是两者的商值
BigInteger ans = firstNum.divide(secNum);
//除数不变,被除数=余数*10
firstNum = (firstNum.mod(secNum)).multiply(TEN);
if (i!=0) { //只输出后面的100位小数点
System.out.print(ans);
}
}
System.out.println();
}
}
class Rational
{
private long ra;
private long rb;
private long gcd(long a, long b){
if(b==0) return a;
return gcd(b,a%b);
}
public Rational(long a, long b){
ra = a;
rb = b;
long k = gcd(ra,rb);
if(k>1){ //需要约分
ra /= k;
rb /= k;
}
}
// 加法
public Rational add(Rational x){
return new Rational(ra*x.rb+x.ra*rb,rb*x.rb); //填空位置
}
// 乘法
public Rational mul(Rational x){
return new Rational(ra*x.ra, rb*x.rb);
}
public String toString(){
if(rb==1) return "" + ra;
return ra + "/" + rb;
}
}
使用该类的示例:
Rational a = new Rational(1,3);
Rational b = new Rational(1,6);
Rational c = a.add(b);
System.out.println(a + "+" + b + "=" + c);
6,标题:三部排序
一般的排序有许多经典算法,如快速排序、希尔排序等。
但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:
使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!
以下的程序实现了该目标。
static void sort(int[] x)
{
int p = 0;
int left = 0;
int right = x.length-1;
while(p<=right){
if(x[p]<0){
int t = x[left];
x[left] = x[p];
x[p] = t;
left++;
p++;
}
else if(x[p]>0){
int t = x[right];
x[right] = x[p];
x[p] = t;
right--;
}
else{
p++; //代码填空位置
}
}
}
如果给定数组:
25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0
则排序后为:
-3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)
每个整数代表一个ID号。
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
例如:
用户输入:
2
5 6 8 11 9
10 12 9
则程序输出:
7 9
再例如:
用户输入:
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
则程序输出:
105 120
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 2000ms
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class test7 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s[] = new String[n];
String ss[][] = new String[n][];
sc.nextLine();
for (int i = 0; i < n; i++) {
s[i] = sc.nextLine();
ss[i] = s[i].split(" ");
}
List list = new ArrayList();
for (int i = 0; i < n; i++)
for (int j = 0; j < ss[i].length; j++) {
list.add(Integer.valueOf(ss[i][j]));
}
Collections.sort(list);
int cw = -1, cf = -1, size = list.size(), a, b;
for (int i = 0; i < size - 1; i++) {
a=list.get(i);
if (a == list.get(i + 1)) {
cf = a;
list.remove(i);
break;
}
}
//1 2 3 4 4 5 6 8
//1 2 3 4 5 6 8
//1 2 3 4 5 6 7 8
for (int i = 0; i < size - 1; i++) {
a=list.get(i);
if (a + 1 != list.get(i + 1)){
cw = a + 1;
break;
}
}
System.out.println(cw + " " + cf);
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class test8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
ArrayList a = new ArrayList();
ArrayList b = new ArrayList();
for(int i=0;i<=n;i++){
a.add(i);
}
for (int j = 1; j < a.size()-1; j++) {
if (j % 2 == 0) {
b.add(j);//注意 这里移除的是下标
//a.remove(j);边遍历边移除会导致长度改变=>下标不断变化!!!
}
}
a.removeAll(b);
for(int j=2;jm && s
import java.util.Scanner;
public class test9 {
static int kinds = 0;
static int a[] = new int[10];
static boolean vis[] = new boolean[10];// 全排列避免重复
static void check(int a[], int n, int num) {
int begin = String.valueOf(num).length();
String str = "";
for (int i = 1; i < n; i++)
str += a[i];
for (int k = 1; k < begin + 1; k++) {
int num1 = Integer.valueOf(str.substring(0, k));
if (num1 < num) {
for (int j = k + (n - k) / 2; j < n - 1; j++) {
int num2 = Integer.valueOf(str.substring(k, j));
int num3 = Integer.valueOf(str.substring(j, n - 1));
if (num2 > num3 && num2 % num3 == 0) {
if (num == num1 + num2 / num3) {
// System.out.println(num+" =
// "+num1+"+"+num2+"/"+num3);
kinds++;
}
}
}
}
}
}
static void dfs(int start, int n, int num) {
if (start == n) {
check(a, n, num);
} else {
for (int i = 1; i < n; i++) {
if (!vis[i]) {
a[start] = i;
vis[i] = true;
dfs(start + 1, n, num);
vis[i] = false;
}
}
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int num = cin.nextInt();
long start = System.currentTimeMillis();
dfs(1, 10, num);
long end = System.currentTimeMillis();
System.out.println(end-start);//运行时间
System.out.println(kinds);
}
}