hdu 1753 我的哪错了啊!!!

作者&投稿:称方 (若有异议请与网页底部的电邮联系)
HDU 2143 看看错在哪里~

a==b/c||a==c/b
因为a是一个整数
如果能得到a的话
必须b能被c整除才行
不然 1,4,6
这样也可以了 1=6/4 这样就输出lucky了

而且本题还需要用__int64

#include
#include
int fx[5][3]={{0,0,0},{0,0,1},{0,1,0},{0,0,-1},{0,-1,0}};
char map[8][8];
int way;
int time2;
int ss(int zz,int hh)
{
int i;
if(way>time2) return -2; // 时间到,停止搜索
map[zz][hh]='X'; // 走过的地方封住
way++; // 增加当前时间
for(i=1;i<=4;i++)
{
if(map[zz+fx[i][1]][hh+fx[i][2]]=='.'||map[zz+fx[i][1]][hh+fx[i][2]]=='D')
{
if(map[zz+fx[i][1]][hh+fx[i][2]]=='D')
{
if(way==time2) // 时间刚好
{
return -1;
}
else // 时间不对
{
continue;
}
}
//map[zz+fx[i][1]][hh+fx[i][2]]='X'; // 不需要在这里封路
if(ss(zz+fx[i][1],hh+fx[i][2])==-1) // Recursive
{
return -1;
}
}
}
way--; // 此路不通, 把时间减回去
map[zz][hh]='.'; // 把此处设定为可通过
return -2;
}
int main()
{
int zhong,heng,time,i,j,hh,zz,hh2,zz2,dian;
while(scanf("%d%d%d",&zhong,&heng,&time),zhong||heng||time)
{
dian=0;
getchar();
for(i=1;i<=zhong;i++) // 把最后一组统一输入, 不明白为什么你要分开
{
for(j=1;j<=heng;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='S')
{
hh=j;
zz=i;
}
if(map[i][j]=='.')
{
dian++;
}
if(map[i][j]=='D')
{
hh2=j;
zz2=i;
}
}
getchar();
}
if(((hh+zz)%2+(hh2+zz2)%2)%2!=time%2)
{
printf("NO
");
continue;
}
if(dian<time-2) // 此处应为-2, 只是-1会有问题
{
printf("NO
");
continue;
}
if(abs(hh2-hh)+abs(zz2-zz)>time)
{
printf("NO
");
continue;
}
way=0;
time2=time;
for(i=0;i<=heng+1;i++)
{
map[0][i]='X';
map[zhong+1][i]='X';
}
for(i=0;i<=zhong+1;i++)
{
map[i][0]='X';
map[i][heng+1]='X';
}
if(ss(zz,hh)==-1)
{
printf("YES
");
}
else
{
printf("NO
");
}
}
return 0;
}

我帮你测试出几组错得数据:
123456 876544
9999910
12 88
90
99.99 0.01
910
你的进位错啦。
上面说的那是因为他是在VC或不支持那种写发的编译器上运行的,其实那样写没有事!!11
我的代码,
# include<stdio.h>
# include<string.h>
int main()
{
int a[410],b[410],c[410],d[410],flag2;
int i,j,k,len1,len2;
char s1[410],s2[410];
while(scanf("%s%s",s1,s2)!=EOF)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
len1=strlen(s1);
flag2=1;
for(i=0;s1[i];i++)//判断是否有小数点(1)
if(s1[i]=='.')
break;
k=0;
for(j=i-1;j>=0;j--) //存整数部分(2)
a[k++]=s1[j]-'0';
k=0; //存小数部分,并把个位作为吧b[0](3)
b[k++]=0;
if(i<len1-1)
for(j=i+1;s1[j];j++)
b[k++]=s1[j]-'0';
len2=strlen(s2);
for(i=0;s2[i];i++)//操作同(1)
if(s2[i]=='.')
break;
k=0;
for(j=i-1;j>=0;j--) //操作同(2)
c[k++]=s2[j]-'0';
k=0;
d[k++]=0; //操作同(3)
if(i<len2-1)
for(j=i+1;s2[j];j++)
d[k++]=s2[j]-'0';
for(i=0;i<410;i++)//整数部分相加,存a中
{
a[i]+=c[i];
if(a[i]>=10)
{
a[i+1]++;
a[i]-=10;
}
}
for(i=409;i>=1;i--)//小数部分相加,存b中
{
b[i]+=d[i];
if(b[i]>=10)
{
b[i-1]++;
b[i]-=10;
}
}
a[0]+=b[0];
/**********以下为增加部分***********/
for(i=0;i<410;i++)
if(a[i]>=10)
{
a[i+1]++;
a[i]-=10;
}
/**********以上为增加部分**********/
i=409;
while(a[i]==0&&i>=0)
i--;
//printf("%d",a[i--]);
while(i>=0)
{
printf("%d",a[i]);
i--;
}
i=409;
while(b[i]==0&&i>=1)
i--;
if(i==0)//判断小数部分是否全为0
flag2=0;
if(flag2==0) //如果是,不输出
printf("\n");
else if(flag2==1) //否则输出小数部分
{
printf(".");
for(j=1;j<=i;j++)
printf("%d",b[j]);
printf("\n");
}
}
return 0;
}

其实也没什么 就是 int i i重定义的多次 并且有个 j 没有 定义类型 int ;

#include <iostream>
#include <string.h>
const int maxn=1000;
using namespace std;
char s1[maxn],s2[maxn];
int dg1[maxn],fl1[maxn],pos1,dgn1,fln1;
int dg2[maxn],fl2[maxn],pos2,dgn2,fln2,ls1,ls2;
int dgans[maxn],flans[maxn],dgan,flan;
int main(){
//freopen("in.txt","r",stdin);
int flag1,flag2,ff,dd;
while(scanf("%s %s",s1,s2)!=EOF){
memset(dgans,0,sizeof(dgans));
memset(flans,0,sizeof(flans));
flag1=flag2=ff=dd=0;
dgn1=fln1=dgn2=fln2=dgan=flan=0;
ls1=strlen(s1);ls2=strlen(s2);
for(int i=0;i<ls1;i++){ //从这里的 int i 开始 后面所有int i 都要去掉 int
if(!flag1&&s1[i]!='.')
dg1[dgn1++]=s1[i]-'0';
if(flag1==1)
fl1[fln1++]=s1[i]-'0';
if(s1[i]=='.') flag1=1;
}
for( i=0;i<ls2;i++){
if(!flag2&&s2[i]!='.')
dg2[dgn2++]=s2[i]-'0';
if(flag2==1)
fl2[fln2++]=s2[i]-'0';
if(s2[i]=='.') flag2=1;
}
int j; //这里定义一下j
for( i=dgn1-1,j=dgn2-1;i>=0||j>=0;){
if(i>=0&&j>=0){
dgans[dgan++]=dg1[i]+dg2[j];
i--;j--;
}
if(i>=0&&j<0){
dgans[dgan++]=dg1[i];
i--;
}
if(i<0&&j>=0){
dgans[dgan++]=dg2[j];
j--;
}
if(i<0&&j<0) break;
}
for( i=0,j=0;i<fln1||j<fln2;){
if(i<fln1&&j<fln2){
flans[flan++]=fl1[i]+fl2[j];
i++;j++;
}
if(i<fln1&&j>=fln2){
flans[flan++]=fl1[i];
i++;
}
if(i>=fln1&&j<fln2){
flans[flan++]=fl2[j];
j++;
}
}
for( i=flan-1;i>=1;i--){
if(flans[i]>=10) {
flans[i-1]+=flans[i]/10;
flans[i]=flans[i]%10;
}
}
if(flans[0]>=10){
dgans[0]+=flans[0]/10;
flans[0]=flans[0]%10;
}
for( i=dgan-1;i>=1;i--){
if(dgans[i]>=10) {
dgans[i-1]+=dgans[i]/10;
dgans[i]=dgans[i]%10;
}
}
int k;
for(k=dgan;k>=0;k--){
if(dgans[k]!=0) {
dd=k;
break;
}
}
for(k=flan-1;k>=0;k--){
if(flans[k]!=0) {
ff=k;
break;
}
}
if(k<=0&&flans[0]==0){
for( i=dd;i>=0;i--) cout<<dgans[i];
cout<<endl;
}
else{
for( i=dd;i>=0;i--) cout<<dgans[i];
cout<<".";
for( i=0;i<=ff;i++) cout<<flans[i];
cout<<endl;
}
}
return 0;
}

有疑问请追问 满意记得采纳

gemaoufui


代县13244844806: hdu 1753 我的哪错了啊!!! -
矣庭小儿: 我帮你测试出几组错得数据:123456 876544999991012 889099.99 0.01910 你的进位错啦.上面说的那是因为他是在VC或不支持那种写发的编译器上运行的,其实那样写没有事!!11 我的代码,# include# include int main() { int a[410],b[410]...

代县13244844806: HDU 1875我的代码哪里错了 -
矣庭小儿: int T, n, index,shu; double pay; scanf("%d", &T); while (T--) { index = 0; pay = 0.0; shu = 0; a[0].s = -1; for (int i = 0; i < 105; i++) fa[i] = i; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d%d", &x[i], &y[i]); for (int j = i - 1; j >= 0; j--) { double z = ...

代县13244844806: hdu2015偶数求和,帮我看看那里错了.好像运算结果跟Sample Output是一样的.
矣庭小儿: 我的代码你看看吧 #include&lt;stdio.h&gt; int main() { int n,m,i,num,ave,max; while(scanf("%d%d",&amp;n,&amp;m) != EOF) { num = 2; while(n&gt;0) { ave = 0; max = n &gt;=m ? m: n; for(i=0;i&lt;max;i++) { ave += num; num += 2; } ave /= max; printf("%d",ave); if(n&gt;m) printf(" "); n -= m; } printf("\n"); } return 0; }

代县13244844806: hdu2186一个简单的问题,不知道哪里出错了,帮看看,谢啦 -
矣庭小儿: #include int main(){ int c,n,x,y,z,t; while(scanf("%d",&c)!=EOF) { while(c--) { t=0; ...

代县13244844806: hdu 2010 为什么有错啊,我感觉对啊,谢谢大侠指导 -
矣庭小儿: // 不要想当然以为 m,n 之间 最多只有两个 水仙花数, // 题目给的测试试例 只是告诉你输出格式而已#include int main() { int m,n,i,a,b,c,k,x=0; while (scanf("%d %d",&m,&n)!=EOF) { x = 0; // 每输入一组 m,n; x都要重新置0 for (i=m;i { k=i; a=k%...

代县13244844806: hdu 2094 哪位大神指导下 我的代码哪里错了??为什么老是WA -
矣庭小儿: 问题描述: 给N个比赛的结果,求能不能产生冠军 解决方法: 只有当都没有输过一场比赛的人数为1时,就能产生冠军,否则不能.代码如下:#include #include #include using namespace std; int main() { int n;#ifndef ONLINE_JUDGE freopen...

代县13244844806: ACM求大神错哪里了,hdu2010水仙花数 -
矣庭小儿: 你的代码没问题,运行了一下可以输出水仙花数,然后我去查了杭电的具体题目,才知道是你的输入和输出不对,先说输入,你的输入只有一次,但是题目的原话是—— “输入数据有多组,每组占一行,包括两个整数m和n(100所以你的输入“...

代县13244844806: hdu 1010 哪错了~!
矣庭小儿: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; int fx[5][3]={{0,0,0},{0,0,1},{0,1,0},{0,0,-1},{0,-1,0}}; char map[8][8]; int way; int time2; int ss(int zz,int hh) { int i; if(way&gt;time2) return -2; // 时间到,停止搜索 map[zz][hh]='X'; // 走过的地方封住 way++...

代县13244844806: hdu 1010 哪错了~! -
矣庭小儿: #include<stdio.h>#include<stdlib.h> int fx[5][3]={{0,0,0},{0,0,1},{0,1,0},{0,0,-1},{0,-1,0}}; char map[8][8]; int way; int time2; int ss(int zz,int hh) { int i; if(way>time2) return -2; // 时间到,停止搜索map[zz][hh]='X'; // 走过的地方封住way++; // 增加当...

代县13244844806: hdu 1013错在哪,请大家指点 -
矣庭小儿: #include int fb(int x) { int sum; sum=0; while(x) { sum+=x%10;x/=10; } if(sum/10)sum=fb(sum); return sum; } int main() { int n; while(scanf("%d",&n)&&n!=0) { printf("%d\n",fb(n)); } return 0; } 你的函数调用的时写错了地方,这样就可以避免写调...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网