C#竞赛题.docx
《C#竞赛题.docx》由会员分享,可在线阅读,更多相关《C#竞赛题.docx(11页珍藏版)》请在冰点文库上搜索。
C#竞赛题
学院C#竞赛题目:
第一题:
(中等)
写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。
例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。
要求上线精确到万下线精确到分。
参考代码如下:
usingSystem;
namespaceObjectInjection
{
/*用法:
DecimalToUpperx=newDecimalToUpper();
*this.textBox2.Text=x.ToUpper(d);
*/
publicclassDecimalToUpper
{
publicDecimalToUpper()
{
//
//TODO:
在此处添加构造函数逻辑
//
}
///
///小写金额转换为大写金额,其他条件:
金额小于一万亿,最多两位小数
///
///源金额,d《1000000000000.00(一万亿),且最多两位小数
///结果,大写金额
publicstringToUpper(decimald)
{
if(d==0)
return"零元整";
stringje=d.ToString("####.00");
if(je.Length>15)
return"";
je=newString('0',15-je.Length)+je;//若小于15位长,前面补0
stringstry=je.Substring(0,4);//取得'亿'单元
stringstrw=je.Substring(4,4);//取得'万'单元
stringstrg=je.Substring(8,4);//取得'元'单元
stringstrf=je.Substring(13,2);//取得小数部分
stringstr1="",str2="",str3="";
str1=this.getupper(stry,"亿");//亿单元的大写
str2=this.getupper(strw,"万");//万单元的大写
str3=this.getupper(strg,"元");//元单元的大写
stringstr_y="",str_w="";
if(je[3]=='0'||je[4]=='0')//亿和万之间是否有0
str_y="零";
if(je[7]=='0'||je[8]=='0')//万和元之间是否有0
str_w="零";
stringret=str1+str_y+str2+str_w+str3;//亿,万,元的三个大写合并
for(inti=0;i{
if(ret[i]!
='零')
{
ret=ret.Substring(i);
break;
}
}
for(inti=ret.Length-1;i>-1;i--)//去掉最后的"零"
{
if(ret[i]!
='零')
{
ret=ret.Substring(0,i+1);
break;
}
}
if(ret[ret.Length-1]!
='元')//若最后不位不是'元',则加一个'元'字
ret=ret+"元";
if(ret=="零零元")//若为零元,则去掉"元数",结果只要小数部分
ret="";
if(strf=="00")//下面是小数部分的转换
{
ret=ret+"整";
}
else
{
stringtmp="";
tmp=this.getint(strf[0]);
if(tmp=="零")
ret=ret+tmp;
else
ret=ret+tmp+"角";
tmp=this.getint(strf[1]);
if(tmp=="零")
ret=ret+"整";
else
ret=ret+tmp+"分";
}
if(ret[0]=='零')
{
ret=ret.Substring
(1);//防止0.03转为"零叁分",而直接转为"叁分"
}
returnret;//完成,返回
}
///
///把一个单元转为大写,如亿单元,万单元,个单元
///
///这个单元的小写数字(4位长,若不足,则前面补零)
///亿,万,元
///转换结果
privatestringgetupper(stringstr,stringstrDW)
{
if(str=="0000")
return"";
stringret="";
stringtmp1=this.getint(str[0]);
stringtmp2=this.getint(str[1]);
stringtmp3=this.getint(str[2]);
stringtmp4=this.getint(str[3]);
if(tmp1!
="零")
{
ret=ret+tmp1+"仟";
}
else
{
ret=ret+tmp1;
}
if(tmp2!
="零")
{
ret=ret+tmp2+"佰";
}
else
{
if(tmp1!
="零")//保证若有两个零'00',结果只有一个零,下同
ret=ret+tmp2;
}
if(tmp3!
="零")
{
ret=ret+tmp3+"拾";
}
else
{
if(tmp2!
="零")
ret=ret+tmp3;
}
if(tmp4!
="零")
{
ret=ret+tmp4;
}
if(ret[0]=='零')//若第一个字符是'零',则去掉
ret=ret.Substring
(1);
if(ret[ret.Length-1]=='零')//若最后一个字符是'零',则去掉
ret=ret.Substring(0,ret.Length-1);
returnret+strDW;//加上本单元的单位
}
///
///单个数字转为大写
///
///小写阿拉伯数字0---9
///大写数字
privatestringgetint(charc)
{
stringstr="";
switch(c)
{
case'0':
str="零";
break;
case'1':
str="壹";
break;
case'2':
str="贰";
break;
case'3':
str="叁";
break;
case'4':
str="肆";
break;
case'5':
str="伍";
break;
case'6':
str="陆";
break;
case'7':
str="柒";
break;
case'8':
str="拐";
break;
case'9':
str="玖";
break;
}
returnstr;
}
}
}
第二题:
(中)
有一群人被困在了一个小岛上,他们只有一个竹排可以逃生,竹排只能坐一个人,于是他们决定通过玩退圈游戏来决定哪个人可以坐上竹排逃生。
这些人围成一个圆圈,从1开始每个人顺序编号,他们商定了一个不幸的数字unlunckyNumber,然后从1的人开始报数,报到unlunckyNumber的倍数就退出游戏,真到最后剩下一个人,这个人就是可以得到竹排的人,编写程序,在Main()方法中输入玩游戏的人数和不幸的数字unluckyNumber,自定义Play()方法按游戏规则进行游戏,方法返回赢的人编号。
参考代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
intunlunckyNumbe;//厄运数字
intpeople;//人数
Console.WriteLine("这是一个非常经典的死亡游戏,只有一个人可以生存!
");
Console.WriteLine("请选择游戏人数");
people=int.Parse(Console.ReadLine());
Console.WriteLine("请选择厄运数字");
unlunckyNumbe=int.Parse(Console.ReadLine());
intend=start(unlunckyNumbe,people,outend);
Console.WriteLine("最后的胜利者是:
{0}",end);
Console.ReadLine();
}
privatestaticintstart(intunlunckyNumbe,intpeople,outintend)
{
Console.WriteLine("开始游戏了!
");
inti=0;//数组循环的索引
bool[]array=newbool[people];//定义的游戏人数
intliver=people;//剩下的生存者
intcountnumber=0;//报号
for(i=0;i{
array[i]=true;//初始化每个人都为真
}
do
{
for(i=0;i{
if(array[i]==true)
{
countnumber++;//当为真的时候报数
if(countnumber%unlunckyNumbe==0)
{
array[i]=false;
liver--;//生存人数减1
}
}
if(liver==1)//当生存人数仅剩一人时
{
break;
}
}
}while(liver>1);
for(i=0;i{
if(array[i])
{
break;
}
}
end=i+1;
returnend;
}
第三题:
(简单)
删除一个整型数组中重复的元素,只保留一个。
参考代码:
class去除重复元素
{
staticvoidMain(string[]args)
{
stringss=Console.ReadLine();
int[]aa=newint[ss.Length];
for(inti=0;i {
aa[i]=Convert.ToInt32(ss[i].ToString());
}
intlen=aa.Length;
for(inti=0;i {
for(intj=i+1;j {
if(aa[i]==aa[j])
{
for(intm=j;m {
aa[m]=aa[m+1];
}
len--;
if(aa[i]==aa[j])
{j--;}
}
}
}
for(inti=0;i {
Console.WriteLine(aa[i]);
}
Console.ReadLine();
}
}
第四题:
(简单)
齐天大圣在天宫摘了一个蟠桃回来,想要分给自己的子孙但是猴子太多了,大圣想了一个方法,猴子们站成一排,然后报数,“1”,“2”,“1”,“2”…按照这种顺序,第一次凡是数到1的都被淘汰,剩下的人继续从1开始报数,组数字后留下的猴子就是桃子的主人。
现在要求猴子的数量由输入决定,然后求出最后成功的是第几个。
第五题:
(难)
5.A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
static void Main(string[] args)
{
char[] name={'A','B','C','D','E'};
int[] value = new int[5];
for (value[0]=0;value[0]<2;value [0]++)
for (value[1]=0; value[1] < 2; value[1]++)
for (value[2]=0; value[2] < 2; value[2]++)
for (value[3]=0; value[3] < 2; value[3]++)
for (value[4]=0; value[4] < 2; value[4]++)
{
if ((value[1] >= value[0]) && (value[1] + value[2] == 1) && (value[2] == value[3]) && (value[3] + value[4]==1) && (value[4]==0 || value[4]==1 && value[0]==1 && value[3]==1))
{
for (int i = 0; i < 5; i++)
{
if (value[i]==1)
{
Console.WriteLine("{0}参加", name[i]);
}
else
{
Console.WriteLine("{0}不参加", name[i]);
}
}
}
}
}