- 复习:1.JDK(jre+tools)-bin
2变量(一个变量只能储存一个数据)
3数据类型 基本+引用
4基本数据类型:byte ->short(char) ->int ->long ->float ->double
5运算符:&&(短路运算符) & >>(正补零 负补一) >>>(只补零)
二.逻辑控制语句
1.顺序结构 2.条件分支结构(if switch) 3.循环结构(for while do.while)
有些关于这方面的基础 就只记题目和需要记的内容了
练习1 找出公约数为5和2的数 2 当x+y大于2是求和
public static void main(String[] args){
for(int i=1;i<=100;i++){
if((i%5==0)&&(i%2==0))
System.out.println(i);
}
Scanner a = new Scanner(System.in);
Scanner b = new Scanner(System.in);
int x=a.nextInt();
int y=b.nextInt();
if((x+y)>2)
System.out.println(x+y);
}
练习2 是不是闰年
Scanner a = new Scanner(System.in);
int x=a.nextInt();
if((x%4==0)&&(x%100!=0)|(x%400==0))
System.out.print("闰年");
else System.out.print("不是闰年");
switch具有穿透性 符合第一个就会往下继续执行 加break终止 判断的变量必须是int 可以是能自动转换成int的值
练习3 输出几天后是星期几
Scanner a = new Scanner(System.in);
int x=a.nextInt();
x=x%7;
switch (x){
case 1: System.out.println("星期4");
break;
case 2: System.out.println("星期5");
break;
case 3: System.out.println("星期6");
break;
case 4: System.out.println("星期7");
break;
case 5: System.out.println("星期1");
break;
case 6: System.out.println("星期2");
break;
case 0: System.out.println("星期3");
break;
default:System.out.println("输错了");
break;
}
for(初值;是否进入循环;步值)初值只进行一次,步值最后进行
while(true) for(int i=1; ;I ++)都为死循环(许多关于用户的都要靠死循环来实现)
do while:必定执行一次再循环 在第一次就进不去循环时会和while产生区别。
x:for(int i=1;i<=9;i++)
y:for(int j = i;j<=9;j++)
break x;//可以把外循环终止
练习4:九九乘法表(没啥用的小心得:多加个“ ”可以让结果更美观)
for(int i=1;i<=9;i++)
for(int j = i;j<=9;j++){
if(i*j<10)
System.out.print(i+"*"+j+"="+(i*j)+" ");
else System.out.print(i+"*"+j+"="+(i*j)+" ");
if(j == 9)
System.out.println();
}
数组的定义三种1 int[] arr = {1,2,3,4} 2 int[] arr2 = new int[]{2,3,4,5} 3 int[] arr3=new int[]
第1种和第2种都是静态赋值(特点 在声明的时候就确定了数组的长度和元素) 在定义时就已经确定了数组的元素 2可以进行重复赋值 int[] arr2 = new int[]{2,3,4,5}后可以arr2 = new int[]{1,3,4,5}
有new可视为新的独立个体 能进行重复赋值
动态赋值 可理解为int[] arr3=new int[5]后加了{0,0,0,0,0}
默认初始值 int –> 0 double ->0.0 char ->’\u0000’ String ->null Boolean ->false
数组是引用数据类型
直接打印数组System.out.print(arr3)显示的是数组的地址
Arrays.toString(arr3) 直接遍历数组
arr是指向的地址 而不是内容
看了后面的3 4章的pdf 第3章看下来基本没有问题 第4章类 对象 封装 构造之前在c++也有过了解 但学的不扎实 想自由运用有较大距离 而且涉及到栈内存 堆内存 地址就头大 对第四章的困惑主要也是这部分 第5章看了一半 static部分有较大的困难
虽然很累 但老师给的题目已经基本完成 也开始在牛客网开始写编程题 之前没做过 感觉难度很大 希望自己能坚持 也希望自己的每日博客能坚持
早出晚归 努力学习 和之前的学习有鲜明的对比 很累 但希望最后的付出能有回报 加油!
【程序16】
题目:输出9*9口诀。
#include<stdio.h>
int main(){
for(int i=1;i<=9;i++)
for(int j = i;j<=9;j++){
printf("%d*%d=%d ",i,j,i*j);
if(j == 9)
printf("\n");
}
return 1;
}
【程序17】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#include<stdio.h>
int main(){
int n=1;
for(int i=1;i<=10;i++)
n=(n+1)*2;
printf("%d",n);
return 1;
}
【程序18】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 #include<stdio.h>
int main(){
char a,b,c;
for(a = 'x'; a <= 'z'; a++) {
for(b = 'x'; b <= 'z'; b++) {
if(a != b) { //避免参赛队员重复比赛
for(c = 'x'; c <= 'z'; c++) {
if(a != c && b != c) { //避免参赛队员重复比赛
if(a != 'x' && c != 'x' && c != 'z') { //根据题意判断
printf("a和%c,b和%c,c和%c进行比赛",a,b,c);
}
}
}
}
}
}
}
【程序19】
题目:打印出如下图案(菱形)
*
***
*****
*******
*****
***
*
#include<stdio.h>
void main()
{
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
}
【程序20】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#include<stdio.h>
int main(){
double a[21],n=2;
a[0]=1;a[1]=2;
for(int i=2;i<=21;i++){
a[i]=a[i-1]+a[i-2];
n=n+a[i]/a[i-1];
}
printf("%f",n);
return 1;
}
【程序21】
题目:求1+2!+3!+...+20!的和
#include<stdio.h>
int main(){
int n=0;
for(int i=1;i<=20;i++)
for(int j = 1;j<=i;j++){
n=n+i*j;
return 1;
}
【程序22】
题目:利用递归方法求5!。
#include<stdio.h>
int main(){
int n=0;
for(int i=1;i<=5;i++)
n=n*i;
return 1;
}
【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 10 + 2*4 一个for循环
【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
取余数后整除10 除了几次10后等于0就是几位数 取的余数就是逆序打印的数字
【程序25】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
5位数a if((a\10000 == a%10)&&(a%100\10 == a\1000%10))
【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
太简单了 没必要做
【程序27】
题目:求100之内的素数(1是不是素数?)
#include<stdio.h>
int main(){
for(int i=2;i<=100;i++){
bool flag = false;
for(int j=2;j<i;j++){
if(i%j == 0){
flag = true;
break;
}
}
if(flag == false)
printf("%d\n",i);
}
return 1;
}
【程序28】
题目:对10个数进行排序 (排了8个数 一样的)
int[] a=new int[] {35,23,21,27,37,15,29,80};
for(int i=0;i<8;i++) {
int max = a[i],t;
for(int j=i+1;j<8;j++)
if(a[j]>max){
max =a[j];
t=a[i];a[i]=a[j];a[j]=t;
}
System.out.print(a[i]+" ");
}
【程序29】
题目:求一个3*3矩阵对角线元素之和
a[1][1]+a[1][3]+a[2][2]+a[3][1]+a[3][3]
【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
int[] a=new int[] {35,23,21,27,37,15,29,80};
int[] b=new int[9];
for(int i=0;i<8;i++) {
int max = a[i],t;
for(int j=i+1;j<8;j++)
if(a[j]>max){
max =a[j];
t=a[i];a[i]=a[j];a[j]=t;
}
System.out.print(a[i]+" ");
}
System.out.println();
int x=50;
for(int i=0;i<=8;i++){
int t = x;
if(i<8)
b[i]=a[i];
if(x>b[i]){
t=b[i];b[i]=x;x=t;
}
System.out.print(b[i]+" ");
}
【程序31】
题目:将一个数组逆序输出。
排序换一下 max换min 方向反一下
【程序32】
题目:取一个整数a从右端开始的4~7位。
public static void main(String[] args) {
int a=12345678;
for (int i = 1; i <= 7; i++) {
if(i>=4){
System.out.println(a%10);
}
a=a/10;
}
}
【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…………
int[][] a= new int[10][10];
for(int i=0;i<10;i++) {
for (int j = 0; j <= i; j++) {
if ((j == 0) || (i == j)) {
a[i][j] = 1;
System.out.print(a[i][j] +" ");
} else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
System.out.print(a[i][j] + " ");
}
}
System.out.println();
}
【程序34】
题目:输入3个数a,b,c,按大小顺序输出。
15题换个顺序
【程序35】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
int[] arr = {5, 15, 2000, 10000, 100, 4000};
// 定义变量,保存数组中0索引的元素
int max = arr[0];int min= arr[0]
// 遍历数组,取出每个元素
for (int i = 0; i < arr.length; i++) {
// 遍历到的元素和变量max⽐较
// 如果数组元素⼤于max
if (arr[i] > max) {
// max记录住⼤值
max = arr[i];
}
if (arr[i] <min) {
// min记录住⼤值
min = arr[i];
}
arr[1]=max;arr[5]=min;
for (int i = 0; i < arr.length; i++) System.out.print(arr[i]+" ");
【程序36】
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
假设n=8 m=3
int[] a=new int[] {35,23,21,27,37,15,29,80};
int[] b=new int[9];
int[] c=new int[8];
for(int i=0;i<8;i++) {
int max = a[i],t;
for(int j=i+1;j<8;j++)
if(a[j]>max){
max =a[j];
t=a[i];a[i]=a[j];a[j]=t;
}
System.out.print(a[i]+" ");
}
System.out.println();
for(int i=0;i<8;i++){
if(i<3){
c[i]=a[5+i];
System.out.print(c[i]+" ");
}
else{
c[i]=a[i-3];
System.out.print(c[i]+" ");
}
}
System.out.println();
【程序37(重要)】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
public static void main(String[] args) {
Que1 que1 = new Que1();
que1.test(10);//以10个人来测试
}
public void test(int totalNum) {
int[] array = new int[totalNum];
//赋初始值,例如10个人,初始值:【1,2,3,4,5,6,7,8,9,10】
for(int i = 0;i<array.length;i++) {
array[i] = i+1;
}
int size = array.length;//值不为-1的元素个数,即可用元素个数
int flag = 0;//用来计数,数1,2,3的
while(size > 1) {
for(int i = 0;i<array.length;i++) {
if(array[i] != -1) {
flag++;
if (flag == 3) {
flag = 0;//重新变成0
array[i] = -1;//标记这个元素已经删除,(模拟删除)
size--;//可用元素个数减1
//删除完以后,判断后面有可用元素,我们让一个小弟来做
int behindSize = getBeginIndexBehindSize(array,i);
if(behindSize<3 && behindSize >0) {
//把后面的元素,全部挪动到前面(不管是可用的,还是非可用的,都挪动)
//让一个小弟来做
//System.out.println("\t挪动前:"+Arrays.toString(array));
moveArrayElements(array, i);//移动了数组的元素
//System.out.println("挪动后:"+Arrays.toString(array));
break;
}
}
}
}
}
System.out.println(Arrays.toString(array));
}
//设计一个方法,给一个数组,给一个起始点,判断起始点后面(不包括起始点)有几个不为-1的元素
private static int getBeginIndexBehindSize(int[] arr,int begin) {
if (begin > (arr.length-1)) {
throw new RuntimeException("begin参数的值超过了数组的索引范围");
}
int result = 0;
for(int i = begin+1;i<arr.length;i++) {
if (arr[i] != -1) {
result++;
}
}
return result;
}
//设计一个方法,给定一个数组,给定一个起始点,把数组从起始点开始,不包括起始点,后面的所有元素,挪动到数组的前面,前面的值相应地往后挪
private static void moveArrayElements(int[] arr,int begin) {
if (begin > (arr.length-1)) {
throw new RuntimeException("begin参数的值超过了数组的索引范围");
}
//创建两个小数组,用来装部分元素
int[] a = new int[begin+1];//前面那部分
int[] b = new int[arr.length-begin-1];//后面那部分
//创建一个大数组,用来装全部元素
//int[] newArr = new int[arr.length];
for(int i = 0;i<a.length;i++) {
a[i] = arr[i];
}
for(int i = 0;i<b.length;i++) {
b[i] = arr[i+begin+1];
}
//覆盖原来的大数组
for(int i = 0;i<arr.length;i++) {
if (i<b.length) {
arr[i] = b[i];
}else {
arr[i] = a[i-b.length];
}
}
}
【程序38】
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s=sc.nextLine();
System.out.println(getline(s));
}
public static int getline(String s1){
int t = s1.length();
return t;
}
【程序39】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
System.out.println(math(n));
}
public static double math(int n1){
double sum = 0;
if(n1%2==0){
for(double i=2;i<=n1;i=i+2)
sum = sum+(1/i);
return sum;
}
else {
for(double i=1;i<=n1;i=i+2)
sum = sum+(1/i);
return sum;
}
}
【程序40】
题目:字符串排序。(字典顺序)
String test= "edcba";
char[] ar = test.toCharArray();
Arrays.sort(ar);
String sorted = String.valueOf(ar);
【程序41】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
for (int i = 5; i <= 20000; i++) {
int t=i;
for(int j=1;j<=5;j++){
if(t%5==1){
t=(t-1)/5*4;
if(j==5)
System.out.println(i);
}
}
}
【程序42】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。输入一个未加密数据,进行加密,并解密。
如:1256加密得到1076
. public static void main(String[] args) {
Scanner a = new Scanner(System.in);
int x=a.nextInt();
if(x>9999)
System.out.print("错误");
if(x>=1000) {
System.out.print(jiami(x));
int t=jiami(x);
System.out.print(jiemi(t));
}
}
public static int jiami(int a){
int[] n=new int[4];
for(int i=0;i<4;i++){
n[i]=(a%10+5)%10;
a=a/10;
}
int sum=n[0]*1000+n[1]*100+n[2]*10+n[3];
return sum;
}
public static int jiemi(int a){
int[] n=new int[4];
for(int i=0;i<4;i++){
n[i]=a%10-5;
if(n[i]<0) n[i]=n[i]+10;
a=a/10;
}
int sum=n[0]*1000+n[1]*100+n[2]*10+n[3];
return sum;
}
.
【程序43】
题目:计算字符串中子串出现的次数
例如:字符串abcewegwgegwefwre中we出现了2次;
字符串aaawersfoitngjaa中aa出现了2次
public static void main(String[] args) {
String str = "abcewegwgegwefwre";
String subStr = "we";
int index = 0;
int count = 0;
for(; index < str.length(); ) {
if(str.indexOf(subStr,index) != str.lastIndexOf(subStr)) {
index += str.indexOf(subStr,index);
count++;
}
}
count++;
System.out.println("子串重复出现了"+count+"次");
}
}
【程序44】
题目:5文钱买一只公鸡,3文钱买一只母鸡,1文钱可以买3只小鸡,现在要用100文钱买100只鸡,那么各有公鸡,母鸡,小鸡多少只?
15i+9j+k=300
i+j+k=100
for(int i=1;i<100;i++)
for(int j=1;j<100;j++)
for(int k=1;k<100;k++){
if((15*i+9*j+k==300)&(i+j+k==100)) {
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}