还记得大一时练习ACM算法的时光,那时候解题用的是c和c++,最近想练练编程算法,但是c和c++好久没用了,很多地方生疏了。鉴于此,我准备用C#来写写代码。
第一行:A进制和B进制(2<=A,B<=30)
第二行:A进制的数值num
要 求 :将A进制的num转为B进制数输出
代码:
//输入A和B进制和数值
string AtoB = Console.ReadLine();
string num = Console.ReadLine();
//得到A、B进制和数值
string[] atob = AtoB.Split(' ');
int A = Convert.ToInt32(atob[0]);
int B = Convert.ToInt32(atob[1]);
char[] c = num.ToArray();
//将A进制转为10进制
int x = 0;
double sum = 0;
for(int i=c.Length -1;i>=0;i--, x++)
{
if (c[i] >= 'A')
{
sum += (c[i] - 'A' + 10) * Math.Pow(A, x);
}
else
{
sum += (c[i] - '0') * Math.Pow(A, x);
}
}
//将10进制转为B进制
int temp = (int)sum;
List<double> result = new List<double>();
while(temp!=0)
{
result.Add(temp % B);
temp /= B;
}
result.Reverse();
foreach (double item in result)
{
Console.Write(item);
}
Console.WriteLine();
//Console.ReadKey();
第一行:输入字符串a
第二行:输入字符串b
要 求 :输出a中b的个数,以及b在a中的起始下标
例:
输入:
abcdabcacabce
abc
输出:
count:3
indexs:0 4 9
//字符串匹配找KMP
int[] Next(string T)
{
int [] next=new int[T.Length];
int k=-1;
int j=0;
next[j]=k;
while(j < T.Length-1)
{
if(k==-1||T[j]==T[k])
{
next[++j]=++k;
}
else
{
k = next[k];
}
}
return next;
}
void KMP(string a, string b ,out int count ,out List<int> indexs)
{
int[] next = Next(b);
int i = 0, j = 0;
count = 0;
indexs = new List<int>();
while (i < a.Length)
{
if (j == -1 || a[i] == a[j])
{
i++; j++;
}
else
{
j = next[j];
}
if (j == b.Length)
{
count++;
indexs.Add(i - b.Length + 1);
j = 0;
}
}
}
string str1 = Console.ReadLine();
string str2 = Console.ReadLine();
int count;
List<int>indexs;
KMP(str1 , str2 ,out count ,out indexs);
Console.WriteLine("Count:{0}",count);
Console.Write("indexs:");
foreach(var item in indexs)
{
Console.Write(item+" ");
}
Console.WriteLine();
//Console.ReadKey();
另一种做法:
void Func(string a,string b,out int count,out List<int> indexs)
{
int i=0,j=0;
count = 0;
indexs = new List<int>();
while(iif (a[i] == b[j])
{
if (j == (b.Length - 1))
{
count++;
indexs.Add(i - b.Length + 1);
}
i++;
if(j<(b.Length-1))
{
j++;
}
else
{
j = 0;
}
}
else
{
i++; j = 0;
}
}
}
输入:一个int类型的值n
求 :n的阶乘和
int n = Convert.ToInt32(Console.ReadLine());
int sum = 0, temp = 1;
for(int i=1;i<=n;i++)
{
temp = temp * i;
sum += temp;
}
Console.WriteLine(sum);
void JudgeWanShu(int num)
{
int sum = 0;
int k = 1;
for (int i = 1; i < num; i++)
{
if (num % i == 0)
{
sum += i;
}
}
if (num == sum)
{
Console.Write("{0} its factors are ", num);
for (int i = 1; i < num; i++)
{
if (num % i == 0)
{
if (k == 1)
{
Console.Write(i);
k = 2;
}
else
{
Console.Write("," + i);
}
}
}
Console.WriteLine();
}
}
int Year = Convert.ToInt32(Console.ReadLine());
if (Year % 4 == 0)
{
if (Year % 100 != 0)
Console.WriteLine("Y");
else if (Year % 400 == 0)
Console.WriteLine("Y");
else
Console.WriteLine("N");
}
else
{
Console.WriteLine("N");
}
void JudgeWanMeiLiFang(int num)
{
int LF = num * num * num;
for (int i = 1; i < num; i++)
{
for (int j = i; j < num; j++)
{
for (int k = j; k < num; k++)
{
if (LF == i * i * i + j * j * j + k * k * k)
{
Console.WriteLine("Cube = {0}, Triple = ({1},{2},{3})", num, i, j, k);
}
}
}
}
}
string read = Console.ReadLine();
string[] snum = read.Split(' ');
List<int> evnnums = new List<int>();
List<int> oddnums = new List<int>();
for (int i=0;iint temp = Convert.ToInt32(snum[i]);
if(temp%2==0)
{
oddnums.Add(temp);
}
else
{
evnnums.Add(temp);
}
}
oddnums.Sort();
evnnums.Sort((a, b) => { return a < b?1:-1; });
for(int i =0;i" ");
}
for (int i = 0; i < oddnums.Count; i++)
{
Console.Write(oddnums[i]+ " ");
}
0 的反序数为0
-0 的反序数为0
100的反序数为1
-23的反序数为-32
int num = Convert.ToInt32(Console.ReadLine());
if(num==0)
{
Console.WriteLine("0");
return;
}
else if(num<0)
{
Console.Write("-");
num = Math.Abs(num);
}
while(num!=0)
{
int temp = num % 10;
if(temp!=0)
{
Console.Write(temp);
}
num /= 10;
}
有五只猴子采了一堆桃,商量第二天分桃子。一只猴子半夜醒来,把桃分五份,多一个,自己吃掉一个再拿走自己的一份;第二只猴子醒来时,把剩余的桃子又分成五份,也多了一个,自己吃掉多的那一个,然后再拿走自己的一份;第三、四、五只醒来时,也做了同样的事(提示:分五份多一个,吃掉多出的那一个,后再拿走自己的一份)。那堆桃子至少有多少个?
//暴力枚举法
for(int i=1;i<10000;i++)
{
float res = i;
for(int j=0;j<5;j++)
{
res = (res - 1) * 4 / 5;
}
int temp = (int)res;
if(temp == res)
{
Console.WriteLine("起始最少桃子数:{0},最后剩余的桃子数:{1}", i, res);
break;
}
}
1 , 1,2,3,5,8,13,……….
int fibonacci1(int n)
{
if(n==1||n==2){
return 1;
}
int a=1;
int b=1;
int result=0;
for(int i=2;ireturn result;
}