/*1.若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。简称“完数”
例如,
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064
编写一个Java程序,输出任意数之间的所有完数。*/
public class TestComNum {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
printComNum(1000);
}
static void printComNum(int n){
int i = 0, j = 0, sum = 0;
for(i = 1; i <= n; i++){
sum = 0;
for(j = 1; j < i; j++){
if(i % j == 0){
sum = sum + j;
}
}
if(sum == i){
System.out.print(sum+" ");
}
}
}
}
开始想多了,想用数组保存因子然后输出···
/*2.对于一个大于3位数的任意整数,输出其降序数。例如,整数82319,则其降序数是98321.
算法提示:将整数的各位数分解到一维数组a中,再将a数组中的元素按降序排序,最后输出a数组元素值。*/
import java.util.Arrays;
public class TestSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
sort(82319);
}
static void sort(int n){
String b=n+"";
int [] a = new int [b.length()];
int i = 0;
while(n != 0){
a[i] = n % 10;
n = n / 10;
i++;
}
Arrays.sort(a);
for(i = a.length - 1; i >= 0; i--){
System.out.print(a[i]);
}
}
}
偷懒了···直接调用了 Arrays.sort(a);
/*3.将二维数组中值最大的元素和左上角元素对调,然后将值最小的元素与右下角元素对调。例如:
1 4 5 6
7 2 10 11
8 9 12 3,
对调后结果
12 4 5 6
7 2 10 11
8 9 3 1 */
public class TestNewMatrix {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] a={{1,4,5,6},{7,2,10,11},{8,9,12,3}};
printMatrix(a);//按二维方式输出数组
printNewMatrix(a);//对调后输出数组
}
static void printMatrix(int[][] a){
int i = 0, j = 0;
for(i = 0; i < a.length; i++){
for(j = 0; j < a[i].length; j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
static void printNewMatrix(int[][] a){
int max = a[0][0], min = a[0][0], i = 0, j = 0, t = 0;
int i1 = 0, j1 = 0;
for(i = 0; i < a.length; i++){
for(j = 0; j < a[i].length; j++){
if(a[i][j] > max){
max = a[i][j];
i1 = i;
j1 = j;
}
}
}
t = a[0][0];
a[0][0] = a[i1][j1];
a[i1][j1] = t;
for(i = 0; i < a.length; i++){
for(j = 0; j < a[i].length; j++){
if(a[i][j] < min){
min = a[i][j];
i1 = i;
j1 = j;
}
}
}
int x = a.length - 1;
t = a[x][x+1];
a[x][x+1] = a[i1][j1];
a[i1][j1] = t;
System.out.println("调整后的数组为:");
printMatrix(a);
}
}
感觉好啰嗦···先找出最大的,然后交换,然后找出最小的,交换····
/*4.用二维数组表示矩阵,实现矩阵乘法。如C=A*B,要考虑矩阵相乘的规则,
即A矩阵和B矩阵是任意的,C矩阵的产生是自动的(C的行数和列数要自动判断生成?怎样得到C矩阵的的行数和列数?)*/
public class TestMatrixPlus {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] a={{1,2},{3,4},{5,6}};//自己定义矩阵
int[][] b={{3,4,5},{1,2,3}};//自己定义矩阵
printMatrix(a,b);
}
static void printMatrix(int[][] a,int[][] b){
//1.要判断矩阵能否相乘,能相乘继续,不能相乘给出提示为什么不能相乘
int i = 0, j = 0, k = 0, sum = 0;
int n1 = a.length, n2 = a[i].length, n3 = b.length, n4 = b[0].length;
//2.得到C矩阵的行数和列数,以产生C矩阵
int [][] c = new int [n1][n4];
if(n2 != n3){
System.out.println("矩阵错误,不可相乘!!!");
}else{
for(i = 0; i < n1; i++){
for(j = 0; j < n4; j++){
sum = 0;
for(k = 0; k < n2; k++){
sum = sum + a[i][k] * b[k][j];
}
c[i][j] = sum;
}
}
}
//3.输出结果矩阵C的值
for(i = 0; i < n1; i++){
for(j = 0; j < n4; j++){
System.out.print(c[i][j]+" ");
}
System.out.println();
}
}
}
矩阵相乘真的好麻烦啊····
对第三个稍加改动
/* 3.将二维数组中值最大的元素和左上角元素对调,然后将值最小的元素与右下角元素对调。
* 例如:
* 1 4 5 6
* 7 2 10 11
* 8 9 12 3,
* 对调后结果
* 12 4 5 6
* 7 2 10 11
* 8 9 3 1
*/
public class TestNewMatrix
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
int[][] a={{1,4,5,6},{7,2,10,11},{8,9,12,3}};
printMatrix(a);//按二维方式输出数组
printNewMatrix(a);//对调后输出数组
}
static void printMatrix(int[][] a)
{
int i = 0, j = 0;
for(i = 0; i < a.length; i++)
{
for(j = 0; j < a[i].length; j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
/**
* @param a
*/
static void printNewMatrix(int[][] a)
{
int max = a[0][0], min = a[0][0], i = 0, j = 0, t = 0;
int i1 = 0, j1 = 0, i2 = 0, j2 = 0;
for(i = 0; i < a.length; i++){
for(j = 0; j < a[i].length; j++)
{
if(a[i][j] > max)
{
max = a[i][j];
i1 = i;
j1 = j;
}
if(a[i][j] < min)
{
min = a[i][j];
i2 = i;
j2 = j;
}
}
}
t = a[0][0];
a[0][0] = a[i1][j1];
a[i1][j1] = t;
if(a[i1][j1] == min) //a[0][0]是最小值,交换后,原来最大值的位置换为了a[0][0]
{
int x = a.length - 1; //跟最后一个交换
t = a[x][x+1];
a[x][x+1] = a[i1][j1];
a[i1][j1] = t;
}
else //a[0][0]不是最小值,交换后不影响最小值的交换
{
int x = a.length - 1; //最小值与最后一个元素交换
t = a[x][x+1];
a[x][x+1] = a[i2][j2];
a[i2][j2] = t;
}
System.out.println("调整后的数组为:");
printMatrix(a);
}
}