写好了的小程序希望高手帮忙修改一下(在线等)

这个程序实现的功能是;用记事本输入一组数,每个都是3位数,然后开始比较.比如;记事本里写的123,342,768,573,470,294,874,983,329,232.... 这个程序实现的功能是;
用记事本输入一组数,每个都是3位数,然后开始比较.
比如;记事本里写的123,342,768,573,470,294,874,983,329,232.
第一次比较;第一组数'123'和第二组数'342'比较,就有2,3是重复的(不管顺序)那么就是2.
然后第2组数(342)再和第3组数(768)比较.又有一个数重复......
以次类推1-2,2-3,3-4,4-5......n-n+1比较形成的重复个数排成一行.行如;
20111121........
从上面的比较方法可以看出1-2,2-3,3-4,4-5......n-n+1都间隔了0个数比较,下面比较的方法是间隔一组数1-3,2-4,3-5,4-6.....n-n+2再输出一行数.行如;001201201.....
第三次比较间隔两组数...1-4,2-5,3-6.4-7.....再输出一行数.
第四次比较间隔三组数.......
如此循环把最后的结果输出到记事本里.
最终结果形如;
第一组;00012021212........
第二组;11102101210........
....
....
....
第n组;120120112012........
我可以选择输出组的数量.
比如说我想输出3组结果它就输出前3组结果出来.
如果你还有什么不懂的地方请加
写好的程序代码如下:
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("in.txt");
ofstream fout("out.txt");
int suanfa(int a, int b)
{
int numa[10]={0},numb[10]={0};
int s=0;
while (a>0){
++numa[a%10];++numb[b%10];//统计数字
a/=10;b/=10;
};
for (int i=0;i<10;i++) if (numa[i]&&numb[i]) ++s;//如果都有则累加
return s;
}
int main()
{
int n,i,j,m=0,s,t;
fin>>n;
int a[n+1],b[n+1][n+1],l=0,k=0;
for(i=1;i<=n;i++)
{
fin>>a[i];
if(a[i]<10000){m++;}
}
if(m!=n){fout<<"兄弟,你还少"<<n-m<<"个数"<<endl;return 0;}
for(i=0;i<=n-2;i++)
{
s=1;
l++;
k=0;
while(s+i+1<=n)
{
t=suanfa(a[s],a[s+1+i]);
k++;
b[l][k]=t;
s++;
}
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
fout<<b[i][j];
}
fout<<endl;
}
return 0;
}
现在这代码不知道怎么的我编译有问题出现但是别人发给我的可执行文件是可以用的(别人帮我写的)现在想请教高手帮我看看。另外想添加一个功能就是在生成的每一组后面添加一个比较以前的数
123,342,768,573,470,294,874,983,329,232.(要比较的数)
形如:最终结果形如;
第一组;00012021212........ (123)
第二组;11102101210........ (342)
....
....
....
第n组;120120112012........ (N-1)
就这样要求了。只要满足就给分!!!
如果有什么还不懂的请加QQ:19268856
展开
 我来答
s903s
2006-10-19 · TA获得超过2180个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:0
展开全部
程序本身不见得有错误. 首先先检查你的 in.txt 有没有错误.
"比如;记事本里写的123,342,768,573,470,294,874,983,329,232."
这样肯定不对.

读程序可知, in.txt中的第一个数是n, 后面才是a[].
所以, in.txt应该是:
10 123 342 768 573 470 294 874 983 329 232
注意数字之间是空格!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5d2d01fa0
2006-10-19 · TA获得超过2158个赞
知道小有建树答主
回答量:943
采纳率:0%
帮助的人:1413万
展开全部
原来的程序有问题,重写了:
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int fun(string str1,string str2)
{
int a[10]={0},b[10]={0};
int s=0;string::iterator itr;
for (itr=str1.begin();itr!=str1.end();itr++) ++a[(*itr)-'0'];
for (itr=str2.begin();itr!=str2.end();itr++) ++b[(*itr)-'0'];
for (int i=0;i<10;i++)
if (a[i] && b[i]) s++;
return s;
}
void main()
{
ifstream fin("in.txt");
ofstream fout("out.txt");
string s;
int n;
fin>>n;
vector<string> str;
str.reserve(n);
for (int i=0;!fin.eof();i++){
fin>>s;
str.push_back(s);
}
int num=str.size();
for (int i=1;i<=n;i++){
for (int j=0;j<num-i;j++){
fout<<fun(str[j],str[j+i]);
}
fout<<"("<<str[i-1]<<")\n";
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b04adda
2006-10-19 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:0
展开全部
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("in.txt");
ofstream fout("out.txt");
int suanfa(int a, int b)
{
int numa[10]={0},numb[10]={0};
int s=0;
while (a>0){
++numa[a%10];++numb[b%10];//统计数字
a/=10;b/=10;
};
for (int i=0;i<10;i++) if (numa[i]&&numb[i]) ++s;//如果都有则累加
return s;
}
int main()
{
int n,i,j,m=0,s,t;
fin>>n;
int *a,**b,l=0,k=0;
a = new int[n+1];
b = new int *[n+1];
for(i=0;i<n+1;i++)
{
b[i]=new int[n+1];
}
for(i=1;i<=n;i++)
{
fin>>a[i];
if(a[i]<10000){m++;}
}
if(m!=n){fout<<"兄弟,你还少"<<n-m<<"个数"<<endl;return 0;}
for(i=0;i<=n-2;i++)
{
s=1;
l++;
k=0;
while(s+i+1<=n)
{
t=suanfa(a[s],a[s+1+i]);
k++;
b[l][k]=t;
s++;
}
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
fout<<b[i][j];
}
fout<<endl;
}

delete[] a;
for(i=0;i<n+1;i++)
{
delete[] b[i];
}
delete[] b;

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e48fb33
2006-10-19 · TA获得超过102个赞
知道答主
回答量:102
采纳率:0%
帮助的人:0
展开全部
俺不懂.

路过..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式