求最大公约数---字符串并集---交集代码小结
时间:2011-03-23 来源:happygx
一:求最大公约数
View Codeusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace maxnumwhen
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("请输入第一个字符");
int input1 =Convert.ToInt32( Console.ReadLine());
Console.WriteLine("请输入第二个字符串");
int input2 =Convert.ToInt32( Console.ReadLine());
int[] gcds;
try
{
TryGcd(input1, input2, out gcds);
Console.WriteLine("共约数");
foreach (int i in gcds)
{
Console.WriteLine(i);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
private static void TryGcd(int x, int y, out int[] gcds)
{
gcds = null;
int tint = 0;
int num1, num2;
num1 = x;
num2 = y;
ArrayList arr1 = new ArrayList();
ArrayList outArr = null;
//如果x>y
if (x > y)
{
num1 = y;
num2 = x;
}
//先算小的
for (int i = 1; i <= num1; i++)
{
tint = num1 % i;
if (tint == 0)
{
arr1.Add(i);
}
}
//如果 两个数不同
if (num1 != num2)
{
outArr = new ArrayList();
for (int i = 1; i <= num2 && i <= num1; i++)
{
tint = num2 % i;
if (tint == 0)
{
//如果
if (arr1.IndexOf(i) != -1)
{
outArr.Add(i);
}
}
}
}
else
{
outArr = arr1;
}
if (outArr.Count > 0)
{
gcds = new int[outArr.Count];
outArr.CopyTo(gcds);
}
}
}
}
二:去交集,并集
假设有两个字符串,str1,str2,
取并集的思想是先定位str1,遍历str2
str1中的字符时事实存在的,所以只需遍历判断str2中的值是否在收入1中包含,如果str2中的值包含在str1中,则将这个字符加到空的字符变量s上,即s是求出的交集
如果str2中的值不包含在str1中,则将不包含的字符串加到str1后面,即str1的返回值就是并集
具体代码实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace CompareString
{
class Program
{
static void Main(string[] args)
{
string str1 = Console.ReadLine();
string str2 = Console.ReadLine();
Console.WriteLine(CompareString(str1, str2));
//Console.WriteLine(CompareStr1(str1,str2)); //方法一:for包含
Console.ReadKey();
}
/// <summary>
///(空间和空间 1998年08月11日中国华人民共和国主席令第十次会议通过,1999年9月8日现予发布实施,2003年7月9日于中华人民共和国国务院常务会议修订通过,1999年9月8日现予发布实施, )
/// </summary>
/// 方法一:通过for来遍历(不管交集还是并集str1的值都是存在的所以只需遍历str2中的值即可)
private static string CompareStr1(string str1, string str2)
{
string str3 = ""; ;
foreach (char s1 in str2)
{
//并集
if (!str1.Contains(s1))
{
str1 = str1 + s1; //如果str1不包含str2的每个字符的话就将不包含的字符加到str1后面
}
//求交集
else
{
str3 = str3 + s1; //如果str1包含str2的每个字符的话则将str2的元素加到str3上
}
}
return str3;
}
//方法二:正则匹配
private static string CompareString(string str1, string str2)
{
if (!Regex.IsMatch(str1, str2)) //如果str1中含有str2中不存在的值
{
//abc bcde
string mt = "";
string s = "";
foreach (char ch in str2)
{
string temp = ch.ToString();
mt = Regex.Match(str1, temp).ToString(); //用正则表达式判断str2中的值师傅包含在str1中,如果包含则取出来
if (mt.Length > 0) //如果有str1中有的值,则加到s中去,即取交集
{
s = s + mt;
}
//将str1中没有的值加到str1中去
else
{
str1 = str1 + temp;
}
}
return str1;
}
return "";
}
}
}
相关阅读 更多 +