算法---简单题(2)
然后接着花了3天的时间把《java2程序设计实用教程》第二章的课后习题写了次,比较郁闷的是,上次写的代码放家里没拷到学校,结果全部重写了次。
比较成就感的是,只有那个蛇形矩阵实在是写不出,就到网上copy了一个过来,哎。
注释也没写,代码也没整理。不管了,今天心情不太好,先放上来,以后补。
using System;
using System.Collections.Generic;
using System.Collections;
public class Java2Test
{
public void OddOrEven(int i)
{
int n=i&1;
if(n==0)
Console.WriteLine(i+"是一个偶数");
if(n==1)
Console.WriteLine(i+"是一个奇数");
}
public void OneToNine(int i)
{
if(i>=0 && i<=9)
Console.WriteLine(i+"在0~9之间");
else
Console.WriteLine(i+"不在0~9之间");
}
public void HexJudge(char c)
{
//Console.Write(c);
c=Char.ToLower(c);
if('a'<=c && c<='f')
Console.WriteLine(c+"是十六进制数
字");
else
Console.WriteLine(c+"不是十六进制数
字");
}
public void DecJudge(char c)
{
if(c>='0' && c<='9')
Console.WriteLine(c+"是十进制数字");
else
Console.WriteLine(c+"不是十进制数
字");
}
public void CapOrSmall(char c)
{
if(Char.IsLower(c))
Console.Write(c+"是小写字母");
else if(Char.IsUpper(c))
Console.WriteLine(c+"是大写字母");
else
Console.WriteLine(c+"不是字母");
}
public void ELetter(char c)
{
if(Char.IsLetter(c))
Console.WriteLine(c+"是字母");
else
Console.WriteLine(c+"不是字母");
}
public void ConvertDec(char c)
{
c=Char.ToLower(c);
int i=(int)c;
i-=48;
Console.WriteLine(c+"="+i);
}
public void ConvertHex(char c)
{
c=Char.ToLower(c);
int i=(int)c;
i-=87;
Console.WriteLine(c+"="+i);
}
public void NFactorial(int i)
{
int m,sum=1;
for(m=1;m<=i;m++)
sum*=m;
Console.Write("for求阶乘:"+sum);
m=1;
sum=1;
while(m<i)
{
sum*=m;
m++;
}
Console.Write(" while求阶乘:"+sum);
m=1;
sum=1;
do{
sum*=m;
m++;
}while(m<=i);
Console.Write(" do-while求阶乘:"+sum);
Console.WriteLine();
}
public void PhalanxOne()
{
const int n=4;
int[,] mat = new int[n,n];
int i=0,j=0;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
mat[i,j]=i;
mat[j,i]=i;
}
}
Console.WriteLine("方阵1");
output(mat);
}
public void Pyramid()
{
Console.WriteLine("输出数字金字塔:");
const int n=4;
int i,j;
for(i=1;i<=n;i++)
{
for(j=0;j<n-i;j++)
Console.Write(" ");
for(j=1;j<=i;j++)
Console.Write(j+" ");
for(j=i-1;j>=1;j--)
Console.Write(j+" ");
Console.WriteLine();
}
}
public void GoldbachEven(int even)
{
Console.WriteLine("任何大于2的偶数都可
以表示为2个素数之和");
IList<int> table;
table = prime_array(even);
for(int i=0;i<table.Count;i++)
{
for(int j=i;j<table.Count;j++)
if(table[i]+table[j]==even)
Console.WriteLine(table[i]+"
+ "+table[j]+" = "+even);
}
}
public void GoldbachOdd(int odd)
{
Console.WriteLine("任何大于5的奇数都可
以表示为3个素数之和");
IList<int> table;
table = prime_array(odd);
for(int i=0;i<table.Count;i++)
{
for(int j=i;j<table.Count;j++)
{
for(int k=j;k<table.Count;k++)
if(table[i]+table[j]+table[k]
==odd)
Console.WriteLine(table[i]
+" + "+table[j]+" + "+table[k]+ " = "+odd);
}
}
}
public IList<int> prime_array(int max)
{
IList<int> list = new List<int>();
//int[] prime = new int[15];
list.Add(2);
int n=1,k=3,i=1;
do{
int j=0;
while(j<n && k% (int)list[j]!=0)
{
j++;
}
if(j==n)
{
list.Add(k);
i++;
n++;
}
k+=2;
}while(k<=max);
return list;
}
public void MaxAndMin()
{
int max,min;
int[] mat = new int[]
{1,5,8,7,6,9,4,6,8,1,0};
max = mat[0];
min = mat[0];
for(int i=1;i<=mat.Length;i++)
{
if(mat[i-1]>max)
max=mat[i-1];
if(mat[i-1]<min)
min=mat[i-1];
}
Console.WriteLine(max+" "+min);
}
public void YangHui()
{
const int n=5;
int[] mat = new int[n];
for(int i=0;i<n;i++)
{
mat[i]=1;
for(int j=i-1;j>0;j--)
mat[j]=mat[j-1]+mat[j];
for(int j=0;j<n-i;j++)
Console.Write(" ");
for(int j=0;j<=i;j++)
Console.Write(mat[j]+" ");
Console.WriteLine();
}
}
public void PhalanxTow()
{
Console.WriteLine("输出蛇形方阵:");
const int n=4;
int[,] mat = new int[n,n];
int k=1;
//k是自然数,递增变化
bool up = true; //
方向向上
for (int sum=0;sum<n;sum++)
//左上三角,sum表示行列的下标和
{
if (up)
for (int i=sum;i>=0;i--)
mat[i,sum-i] = k++;
//k先赋值后自加
else
for (int i=0;i<=sum;i++)
mat[i,sum-i] = k++;
up=!up;
//方向求反
}
for (int sum=n;sum<2*n-1;sum++)
//右下三角
{
if (up)
for (int j=sum-n+1;j<n;j++)
mat[sum-j,j] = k++;
else
for (int j=n-1;j>sum-n;j--)
mat[sum-j,j] = k++;
up=!up;
}
output(mat);
}
public void PhalanxThree()
{
Console.WriteLine("输出方阵3:");
const int n=4;
int[,] mat = new int[n,n];
int i,j,m,k=1;
for(i=0;i<n;i++)
{
for(m=0,j=i;m<=i;m++)
mat[m,j]=k++;
for(m=i,j=i-1;j>=0;j--)
mat[m,j]=k++;
}
output(mat);
}
public void SaddlePoint()
{
Console.WriteLine("输出鞍点:");
int[,] mat = new int[,]{{1,2,5,10},
{4,12,15,7},
{9,8,14,11},
{3,5,4,6}
};
output(mat);
int line=0,i,j,k,max,min;
// Console.WriteLine(mat.Length);
for(i=0;i<mat.GetLength(0);i++)
{
max=mat[i,0];
// Console.WriteLine(max+" ");
for(j=1;j<=mat.GetLength(1);j++)
{
if(mat[i,j-1]>max)
{
max=mat[i,j-1];
line=j;
}
}
min=max;
// Console.WriteLine(max+" ");
for(k=1;k<=mat.GetLength(1);k++)
if(mat[k-1,line-1]<min)
min=mat[k-1,line-1];
//Console.Write("line="+line);
if(min==max)
Console.WriteLine("找到鞍
点:"+min);
}
}
public void PhalanxFour()
{
int n=6,k=0;
int[] mat = new int[]{7,4,8,9,1,5};
for(int i=0;i<n;i++)
{
/*
//output(mat);
for(int j=n-1;j>0;j--)
{
int tmp;
k=(j+n-1)%n;
tmp=mat[k];
mat[k]= mat[j];
mat[j]=tmp;
//Console.Write(k+" ");
}
*/
for(int j=0;j<n;j++)
{
k=(j-i+n)%n;
Console.Write(mat[k]+" ");
}
Console.WriteLine();
}
}
public void FindK()
{
//const int n=5;
const int Max=30;
int k=2;
do
{
ConvertInt(k);
k++;
}while(k<=Max);
}
public void ConvertInt(int k)
{
string s1=k.ToString();
string s2=Math.Pow(k,2).ToString();
string s3=Math.Pow(k,3).ToString();
int m=-1,n=-1;
/*
for(int i=0;i<s1.Length;i++)
{
for(int j=0;j<s2.Length;j++)
{ if(s1[i]==s2[j])
for(int m=0;m<s3.Length;m++)
{
if(s1[i]==s3[m])
d[pos++]=s1[i];
}
}
}
*/
for(int i=0;i<s1.Length;i++)
{
m = s2.IndexOf(s1[i]);
if(m!=-1)
n =s3.IndexOf(s1[i]);
if(n!=-1)
Console.WriteLine
(s1+":"+s2+":"+s3+":找到d="+s1[i]+" ");
m=-1;
n=-1;
}
}
public void Smith()
{
const int Max=400;
int[] mat = new int[100];
mat = prime_table(Max);
// for(int i=0;i<mat.Length;i++)
// Console.Write(mat[i]+" ");
int k=2,i=0,m=0,sum=1;
do
{
// m=(int)Math.Sqrt(k)+1;
m=k;
//Console.Write(m+" ");
i=0;
sum=1;
while(mat[i]<m&&mat[i]!=0)
{
//Console.Write(mat[i]+" ");
if(m%mat[i]==0)
sum+=mat[i];
i++;
}
if(sum==getBitAdd(k))
Console.WriteLine(k+"为smith
数:"+sum+" ");
k++;
}while(k<=Max);
}
public int getBitAdd(int num)
{
int sum=0;
while(num!=0){
sum+=num%10;
num/=10;
}
return sum;
}
public int[] prime_table(int Max)
{
int[] prime = new int[100];
prime[0]=2;
int n=1,k=3,i=1;
do{
int j=0;
while(j<n && k%prime[j]!=0)
{
j++;
}
if(j==n)
{
prime[i]=k;
i++;
n++;
}
k+=2;
}while(k<=Max);
return prime;
}
public void GeneDouble()
{
const int Max = 500;
int sum=1,other=0;
int k=6;
do{
sum = GeneSum(k);
//Console.Write("sum="+sum+" ");
other = GeneSum(sum);
if(k==other)
if(k<=sum)
Console.WriteLine(k+" 和 "+other+" 是
亲密数对");
k++;
}while(k<=Max);
}
public int GeneSum(int k)
{
int sum =1;
int mid=(int)Math.Sqrt(k)+1;
for(int i=2;i<mid;i++)
if(k%i==0)
{
sum+=i;
sum+=k/i;
}
return sum;
}
public void FindChildChar(string a,string b)
{
for(int i=0;i<a.Length;i++)
{
if(b.IndexOf(a[i])>-1)
Console.Write("存在字符:"+a
[i]);
}
Console.WriteLine();
}
public void FindChildString(string a,string
b)
{
string tmp="";
for(int i=0;i<b.Length;i++)
{
for(int j=0;j<=b.Length-i;j++)
{
tmp=b.Substring(i,j);
if(a.IndexOf(tmp)>0)
Console.Write("找到子串:"+tmp+"
");
}
//Console.WriteLine();
}
}
public void output(int[] mat)
{
for(int i=0;i<mat.Length;i++)
{
Console.Write(mat[i]+" ");
}
}
public void output(int[,] mat)
{
// Console.Write(mat.Length); 16
// Console.Write(mat.Rank);
for(int i=0;i<mat.GetLength(0);i++)
{
for(int j=0;j<mat.GetLength(1);j++)
Console.Write(mat[i,j]+"\t");
Console.WriteLine();
}
}
public static void Main()
{
Java2Test j2t = new Java2Test();
j2t.OddOrEven(8);
j2t.OneToNine(15);
j2t.HexJudge('a');
j2t.DecJudge('7');
j2t.CapOrSmall('D');
j2t.ELetter('g');
j2t.ConvertDec('9');
j2t.ConvertHex('f');
j2t.NFactorial(4);
j2t.PhalanxOne();
j2t.Pyramid();
j2t.GoldbachEven(16);
j2t.GoldbachOdd(11);
j2t.MaxAndMin();
j2t.YangHui();
j2t.PhalanxTow();
j2t.PhalanxThree();
j2t.SaddlePoint();
j2t.PhalanxFour();
j2t.FindK();
j2t.Smith();
j2t.GeneDouble();
j2t.FindChildChar
("iamaboy","iamagirl");
j2t.FindChildString
("iamagoodboy","iamagirl");
}
}
作 者:doku
出 处:http://www.cnblogs.com/kulong995/
关于作者:喜欢编程,喜欢美食,专注于.NET项目开发。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!


浙公网安备 33010602011771号