1,全排列
public class 全排列 {
static int count=0;
public static void main(String[] args) {
int a[]= {1,2,3,5,5};
f(a,0);
System.out.println(count);
}
private static void f(int[] a, int k) {
if(k==a.length)
{
count++;
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
}
for(int i=k;i<a.length;i++)
{
{int temp=a[k];a[k]=a[i];a[i]=temp;}
f(a,k+1);
{int temp=a[k];a[k]=a[i];a[i]=temp;}
}
}
}
2,排序
import java.util.Arrays;
public class 排序 {
public static void main(String[] args) {
int a[]= {2,4,7,9,5,8,3,1,33};
int n=a.length;
Arrays.sort(a); //sort排序
for(int i=0;i<n;i++)
{
System.out.print(a[i]+" ");
}
System.out.println();
bubble(a,n); //冒泡排序
for(int i=0;i<n;i++)
{
System.out.print(a[i]+" ");
}
}
private static void bubble(int[] a, int n) {
for(int i=0;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
}
运行结果:
3,数组排序,去重 (2018第8题日志统计------排序,2017第7题日期问题-------排序,去重)
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class 大题3_日志统计1 {
public static class act{ //创建类
int first;
int second;
}
public static class cmp implements Comparator<act>{ //自定义比较类
public int compare(act o1,act o2)
{
if(o1.first==o2.first)
{
return o1.second-o2.second; //second从小到大
}
return o1.first-o2.first;//first从小到大
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
act a[]=new act[n];
for(int i=0;i<n;i++)
{
a[i]=new act();
a[i].first=sc.nextInt();
a[i].second=sc.nextInt();
}
Arrays.sort(a,new cmp()); //升序
for(int i=0;i<n;i++)
{
System.out.println(a[i].first+" "+a[i].second);
}
}
}
运行结果:
import java.util.HashSet;
public class 去重 {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("aaa");
set.add("aaa");
set.add("aaa");
for(String ss:set)
{
System.out.println(ss);
}
}
}
https://blog.csdn.net/zhenghao6099/article/details/72801876 HashSet如果去掉重复的值,要重写hashcode和equals方法。
import java.util.HashSet;
public class 去重 {
public static class date{
int y; //年
int m; //月
int d; //日
public date(int i, int j, int k) {
this.y=i;
this.m=j;
this.d=k;
}
public String toString()
{
return String.format("%d-%02d-%02d",y,m,d);
}
public int hashCode() //hashCode 注意C为大写!!!!字母拼错就会结果错误
{
return y+m+d;
}
public boolean equals(Object obj)
{
if(!(obj instanceof date))
{
return false;
}
date date1=(date)obj;
return this.y==date1.y && this.m==date1.m && this.d==date1.d;
}
}
static HashSet<date> set=new HashSet<date>();
public static void main(String[] args) {
date d1=new date(2011,01,01);
date d2=new date(2011,01,01);
date d3=new date(2011,01,01);
set.add(d1);
set.add(d2);
set.add(d3);
for(date ss:set)
{
System.out.println(ss.toString());
}
}
}
运行结果:
4,是否互质 (最大公约数 2017包子计数) (最小公倍数=a*b/最大公约数)
见2017包子计数
5,动态规划:背包问题,完全背包问题(2017包子计数)
背包问题见动态规划01背包问题,完全背包问题见2017包子计数
6,递归
斐波那契Fibonacci数列
7,暴力破解 (2016年第6届第7题牌型种数--------for循环暴力)
牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
public class 填空7_牌型种数 {
//3598180
//共是记号为A,2,3,4,5,6,7,8,9,10,J,Q,k的十三个元素,每个元素的情况可能是0,1,2,3,4。这十三个元素的和为13即可。
public static void main(String[] args) {
int a[]=new int[13];
int count=0;
for(a[0]=0;a[0]<=4;a[0]++)
{
for(a[1]=0;a[1]<=4;a[1]++)
for(a[2]=0;a[2]<=4;a[2]++)
for(a[3]=0;a[3]<=4;a[3]++)
for(a[4]=0;a[4]<=4;a[4]++)
for(a[5]=0;a[5]<=4;a[5]++)
for(a[6]=0;a[6]<=4;a[6]++)
for(a[7]=0;a[7]<=4;a[7]++)
for(a[8]=0;a[8]<=4;a[8]++)
for(a[9]=0;a[9]<=4;a[9]++)
for(a[10]=0;a[10]<=4;a[10]++)
for(a[11]=0;a[11]<=4;a[11]++)
for(a[12]=0;a[12]<=4;a[12]++)
{
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
count++;
}
}
System.out.println(count);
}
}