C语言,谁帮我看看下面这一题啊,哪里出问题了,输出结果和题目不一样

我写的程序:
#include <stdio.h>#include <stdlib.h>long htoi(char s[]) /*将十六进制数转化为十进制*/{ long i,n=0; for(i=0;s[i]!='\0';i++){ if(s[i]>='0'&&s[i]<='9') n=n*16+s[i]-'0'; else if(s[i]>='A'&&s[i]<='F') n=n*16+s[i]-'A'+10; else if(s[i]>='a'&&s[i]<='f') n=n*16+s[i]-'a'+10; } return n;}long haiming(char* a,char* b) /*计算海明距离*/{ long num=0,mask; long m=htoi(a); long n=htoi(b); long t=m^n; for (mask=524288; mask>=1; mask /=2) if ((t & mask)!=0) num++; return num;}
int main(){ long k,n,i,j,x,min,t;/*k:测试对数,n:每一组数据的个数*/ scanf("%d",&k); for(x=0;x<k;x++) { char** a; scanf("%d",&n); /*动态申请二维数组a[n][10]*/ a=(char**)malloc(n*sizeof(char *)); for(i=0;i<n;i++) a[i]=(char *)malloc(6*sizeof(char)); /*输入二维数组a[n][5]*/ for(i=0;i<n;i++) {gets(a[i]); getchar();} /*计算海明距离*/ for(i=0,min=20;i<n-1;i++) for(j=i+1;j<n;j++) { t=haiming(a[i],a[j]); if(t<min) min=t; } printf("%d\n",min); /*释放二维数组*/ for(i=0;i<n;i++) free(a[i]); free(a); fflush(stdin); //清空缓存区 } return 0;}
输出结果为什么都是6,哪里有问题

第1个回答  2013-07-16
代码没有什么问题,主要是读取输入时不正确,特别是修改3那儿?为什么要getchar,并丢弃?
是想处理回车换行吗?你这样做,实际上把字符串的第一个字符给丢弃了。

#include<stdafx.h>
#include <iostream>
#include<math.h>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
long htoi(char s[]) /*将十六进制数转化为十进制*/
{
long i,n=0;
for(i=0; s[i]!='\0'; i++)
{
if(s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
else if(s[i]>='A'&&s[i]<='F')
n=n*16+s[i]-'A'+10;
else if(s[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10;
}
return n;
}
long haiming(char* a,char* b) /*计算海明距离*/
{
long num=0,mask;
long m=htoi(a);
long n=htoi(b);
long t=m^n;
for (mask=524288; mask>=1; mask /=2)
if ((t & mask)!=0) num++;
return num;
}
int main()
{
long k,n,i,j,x,min,t;/*k:测试对数,n:每一组数据的个数*/
scanf("%d\r\n",&k); //<=========修改1
for(x=0; x<k; x++)
{
char** a;
scanf("%d\r\n",&n);//<=========修改2
/*动态申请二维数组a[n][10]*/
a=(char**)malloc(n*sizeof(char *));
for(i=0; i<n; i++)
a[i]=(char *)malloc(6*sizeof(char));
/*输入二维数组a[n][5]*/
for(i=0; i<n; i++)
{
gets(a[i]);
//getchar(); //<=========修改3
}
/*计算海明距离*/
for(i=0,min=20; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
t=haiming(a[i],a[j]);
if(t<min) min=t;
}
}
printf("%d\n",min);
/*释放二维数组*/
for(i=0; i<n; i++)
free(a[i]);
free(a);
fflush(stdin); //清空缓存区
}
return 0;
}本回答被提问者采纳

c语言大神帮我看看,为什么结果输出不对,输入27638496,要求结果64862
你的主函数main 里的输入输出语句的标示符%1d写错了,应该是%ld(小写的LD)而不是%1d(数字1小写D),把main函数中的scanf("%1d",&n);改成scanf("%ld",&n); 把printf("\\nThe result is:%1d\\n",get_even(n));改成printf("\\nThe result is:%ld\\n",get_even(n));就没有问题了.

C语言冒泡排序输出程序,帮忙看看哪里错了,输出结果不对,在线等!!!
程序完全正确的,因为这个代码是对数据进行升序的排序。排序以后的数字8是在第八个位置,在数组中的下标就是7。

C语言求解,谁帮我看看我哪里错了,答案不对
if((a+b+c+d)%15==0) { t = a*1000 + b*100 + c*10 + d; sum += t; \/\/ 这句要放在if的范围内} 我提供一个更好的写法 include <stdio.h>int main() {int a, b, c, d;long sum = 0, t;for (t = 1000; t < 10000; t += 2) {a = t \/ 1000;b =...

c语言:如图,请问一下哪里出错了?
首先解答一下这个C语言代码出错的原因:第一个gets未定义:出现这个错误一般是没有包含相应的头文件,或者库里没有这个函数。这里应该是没有这个函数。gets(char *dest)是一个老的库函数,采用这个函数存在越界的安全隐患。它只有一个参数,如果输入的字符个数超过dest内存空间,程序可能失败,也可能被黑客...

C语言开关灯问题,麻烦大神们帮我看看这个程序哪里错了啊,结果不对...
1、int a[6000]={1};这句。你这只是将a[0]赋值1,其他都是0,数组默认以0填充,应该改为:int a[6000];for(i=0;i<6000;i++)a[i]=1;2、第二层循环里:if(a[j]==0)a[j]=1;if(a[j]==1)a[j]=0;这个语句把所有的灯都关闭了,因为如果关了,就打开;打开后又关了。逻辑...

C语言求助,哪位大佬帮我看看这道题?一直搞不清楚
知道答主 回答量:133 采纳率:0% 帮助的人:5.2万 我也去答题访问个人页 关注 展开全部 这是一道C语言的增删改查的链表操作操作的典型题目,同时考察对结构体的理解程度。最简单的就是使用顺序链表做。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 ...

C语言switch语句 大神看看哪里出了问题 为什么我求出来的利息与本金的...
s应在switch语句前赋值,如下:s=(long)b*(1+((float)year*年利率))注意b和year都为整型,在×利率前必须转化为浮点数型,否则因为year数值太小,精度会非常低,算出结果很不准。或者写为:s=(long)b*(1.0+年利率×year))其实更好的办法应该设b和s为double型,因为人民币不是也有一毛一分...

请C语言高手看看为什么计算结果的小数部分与答案不同
j就是连乘的结果,j=i;这一步不用了;s=s+1.0\/i 要改成 s=s+1.0\/j 这么改好后理论上是对的,输入n 较小的话,可以和答案比较接近,但是n如果稍大一点,比如40,计算就会溢出,不能得到正确的结果。所以这个算法基本上可以认为是没有用的,只能得到很粗略的近似结果,想要精确的话还得...

C语言编程:谁帮我看看这段程序哪出错了?
...n=n+1;...} n从2开始,是素数,输出;然后遇到n=n+1;n变成3;一次循环结束,遇到n++,n变成4,4是合数,因此不会有输出;每次循环,n都增加了2,因此,n的值是:2,4,6,8,...,100 这里面当然除了2没有其他素数。因此,将n=n+1;删除即可。n从2到k,每一个都要查看。

我是c语言小白,问问大神帮我看看编写的简单程序这哪里出错了?
#include<stdio.h> 输入代码时忽视输入法隐藏的错误 表面上看都是一样的代码,但是第二行就有错误,是全角和半角的不同,再看:正确编译运行 所以你的代码没有任何问题,但是要注意代码输入的方法。以前回答了很多,有时间可以看看我最近回答c语言问题:网页链接 网页链接 网页链接 网页链接等等。

相似回答