日期:2014-05-18  浏览次数:20856 次

问几个简单的算法
a,输入一个整数如2,输入项数如4,计算下式的值:2+22+222+2222(如输入的是
和2   则计算的是   3+33)

b,一篮子鸡蛋   数目除2余1,除3余2,除4余3,除5余4   问有多少个

c,一个数的个位是8(如128),将8移到首位(变成812)后将是原来的4倍,编
程求这个数(最小值)

d,A、B、C、D、E、F、G分别代表   1000、500、100、50、5、1,给定一个字符串
如   ABC,求出它的值(ABC=1000+500+100)


第一题算出来了       第2题   用程序怎么不会写...

第3题...   答案求不出...     第4题   好象要类型强制转换求吧..     求程序源码     谁给算算啊...

答案出来就结贴

------解决方案--------------------
第一个不考虑溢出
private Int64 getSum(int data, int num)
{
Int64 i64 = 0;
for (int i = 1; i <= num; i++)
{
i64 += Int64.Parse(data.ToString().PadRight(i, data.ToString().ToCharArray()[0]));
}
return i64;
}


------解决方案--------------------
第三题

private int getMin(int total)
{
int min = 0;
for (int i = 1; i < total; i++)
{
if (i.ToString().LastIndexOf( '8 ') == (i.ToString().Length-1) && i * 4 == int.Parse( "8 " + i.ToString().TrimEnd( '8 ')))
{
min = i;
i = i + total;
}
}
return min;
}
------解决方案--------------------
一个数的个位是8(如128),将8移到首位(变成812)后将是原来的4倍,编
程求这个数(最小值)

int getRequireValue()
{
int l=0;
int tempN;
for(int n=18;n <Int.MaxValue;n=n+10)
{
tempN=8;
l=n.tostring().length;
for(int i=1;i <l;i++)
{
tempN*=10;
}
tempN+=n%10;
if(tempN/n==4)
{
return n;
}
}
returen 0;
}
------解决方案--------------------
//d,A、B、C、D、E、F、G分别代表 1000、500、100、50、5、1,给定一个字符串
string chars = "ABCDEFG ";
int[] numbers = new int[] { 1000, 500, 100, 50, 5, 1 };
string S = "ABC ";
int sum = 0;
foreach(char c in S)
{
int i = chars.IndexOf(c);
if (i < 0) break;
sum += numbers[i];
}
Console.WriteLine(sum); // 1600

------解决方案--------------------
第四道题思路:
先用一个数组来保存输入的字母A,B,C,D..
再用一个数组来保存和字母相对应的值500,100,200。。。
然后输入的字母再和数组中的字母相比。求出所以位置,再从数据数据中取得相对应的值相加即可。。。
现在没写时间写。。。只能提供思路。。。
------解决方案--------------------
1.一种另类思考方式,而已.
private double getSum(double a,double b)
{
double sum=0;
for(double i=b;i> 0;i--)
{
sum+=a*i*Math.Pow(10,b-i);
}
return sum;
}
2.这个%2=1 奇数 ;%5=4不是4结尾就是9结尾=9结尾
private int getEgg()
{
for(int i=19;;i+=10)
if(i%3==2&&i%4==3)
return i;
}
3.末尾是8,4倍结尾是2 最后两位是28 从百位开算就可以
private int getMin()
{
for(int i=128;;i+=100)
{
if((i*4)==((i/10)+8 * (int)Math.Pow(10, (int)Math.Log10(i))))
{
return i;
}
}
}
4.搞笑一把,简单的对应 不写了
private int 搞笑()
{
int A=1000,B=500,C=100,D=50,E=5,F=1;
return A+B+C;
}//另清清的办法,很有创意