当前位置: 代码迷 >> C语言 >> [讨论]]第十五期编程题目
  详细解决方案

[讨论]]第十五期编程题目

热度:260   发布时间:2007-05-19 08:36:35.0
我提示一下.
既然是回文所以只要记录一半就可以了
----------------解决方案--------------------------------------------------------
都是ZJU的题目嘛,第一道好像是找规律推个公式,没做过。第二道我用筛的,过的
----------------解决方案--------------------------------------------------------

对。11楼说的对。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Reverse(char* buf)
{
int i,len = strlen(buf);
char ch;
for(i = 0;i<len/2;i++)
{
ch = buf[i];
buf[i] = buf[len-i-1];
buf[len-i-1] = ch;
}
}

int main()
{
int index,num,temp;
char buf[50];
while(scanf("%d",&index) && index)
{
if(index > 108)
{
num = index-99;
_itoa(num,buf,10);
Reverse(buf);
printf("%d%s\n",num,buf);
}
else
{
if(index<10)
printf("%d\n",index);
else if(index<19)
printf("%d%d\n",index-9,index-9);
else
{
index-=19;
num = index/10+1;
temp = index%10;
printf("%d%d%d\n",num,temp,num);
}
}
}
return 0;
}

[此贴子已经被作者于2007-5-20 9:13:29编辑过]


----------------解决方案--------------------------------------------------------

2000我纯推数学公式过了……,连我自己都感到赞叹


----------------解决方案--------------------------------------------------------
回复:(leeco)2000我纯推数学公式过了……,连我自己...
你推出的数学公式是什么?

你说出来让大家一起来学习一下
----------------解决方案--------------------------------------------------------
以下是引用jiangzw625在2007-5-19 23:00:43的发言:

对。11楼说的对。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Reverse(char* buf)
{
int i,len = strlen(buf);
char ch;
for(i = 0;i<len/2;i++)
{
ch = buf[i];
buf[i] = buf[len-i-1];
buf[len-i-1] = ch;
}
}

int main()
{
int index,num,temp;
char buf[50];
while(scanf("%d",&index) && index)
{
if(index > 108)
{
num = index-99;
_itoa(num,buf,10);
Reverse(buf);
printf("%d%s\n",num,buf);
}
else
{
if(index<10)
printf("%d\n",index);
else if(index<19)
printf("%d%d\n",index-9,index-9);
else
{
index-=19;
num = index/10+1;
temp = index%10;
printf("%d%d%d\n",num,temp,num);
}
}
}
return 0;
}


答案不正确.样例输出都没有对.思路不对.不知道你是不是把题目看错了
----------------解决方案--------------------------------------------------------

过了的 也把自己的贴出来让大家学习一下


----------------解决方案--------------------------------------------------------

我没有看错题阿
因为我是用vc写的,itoa不是c标准所以出错,所以我改了,可又出来,Wrong Answer
我现在还不知哪错了呢。奇怪
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void intToStr(int num,char* buf)
{
int i,k = 0;
while(num>0)
{
i = num%10;
num/=10;
buf[k++] = i+48;
}
buf[k] = '\0';
}


int main()
{
int index,num,temp;
char buf[50];
while(scanf("%d",&index) && index!=0)
{
if(index > 108)
{
num = index-99;
intToStr(num,buf);
printf("%d%s\n",num,buf);
}
else
{
if(index<10)
printf("%d\n",index);
else if(index<19)
printf("%d%d\n",index-9,index-9);
else
{
index-=19;
num = index/10+1;
temp = index%10;
printf("%d%d%d\n",num,temp,num);
}
}
}
return 0;
}


----------------解决方案--------------------------------------------------------
你输入231的时候似乎不对
----------------解决方案--------------------------------------------------------
哗!竟然有如此高手,能用数学公式推出来。
----------------解决方案--------------------------------------------------------
  相关解决方案