注册 登录
编程论坛 VC++/MFC

[求助](未解决)for语句循环问题

ecbtnrt 发布于 2006-09-20 21:02, 1825 次点击

输入十个数,求出不同相同数的个数,及其个数的多少
#include <iostream.h>

const int N = 10;
void main()
{
struct
{
int num;
int tim;
}R[N];
int i;
int ar[N];
cout << "please input ten numbers : ";
for(i=0; i<N; i++)
cin >> ar[i];

R[0].num = ar[0];
R[0].tim = 1;
int j;
int t = 0;
int m;
for(i=1; i<N; i++)
{
for(j=0; j<=t; j++)
if(R[j].num = ar[i])
R[j].tim ++;
else //错误
{
t ++;
R[t].num = ar[i];
R[t].tim = 1;
m = t;
}
}
for(i=0; i<m; i++)
cout << R[i].num << " " << R[i].tim << endl;
}

这个题目的t是错误的,请指出如何在运行完if后结束

[此贴子已经被作者于2006-9-21 20:22:21编辑过]

10 回复
#2
ecbtnrt2006-09-20 22:54

我的思路是这样的:把数组中的十个数依次与前面的储存在要输出的结构体数组里面,如果前面没有这个数,就是结构体数组的下标加1把这个数储存上,另次数等于1,如果有了,只让这个数出现的次数加1;算法是没有错误的,当然可能有更好的算法。

#3
mohun1984832006-09-20 23:20
不大明白,什么叫不同相同数
#4
ecbtnrt2006-09-21 10:25

我把题目说清楚些,可能不说的不是很清楚。
输入10个int型数,求出其中互不相同数个个数num,以及此num个数中的每一个数出现的次数!

不知道 人们是不是对我的这一问题不屑一顾 啊,什么的,我想应该不是很困难啊,算法都写出来了,只需要改一下for循环就可以了!

#5
mohun1984832006-09-21 14:36
提示一点,你的
for(i=1; i<N; i++)
{
for(j=0; j<=t; j++)
if(R[j].num = ar[i]) //这里是不是有点问题,是判断相等?你的操作是赋值。
R[j].tim ++;
else
{
t ++;
R[t].num = ar[i];
R[t].tim = 1;
m = t;
}
}
#6
吴亮2006-09-21 19:26

楼上的好仔细啊,可能就是这里出错了,少了一个等于好,如果是赋值它不会往下走了,一直都是循环R[j].tim++

#7
ecbtnrt2006-09-21 20:34

的确看的很仔细是的应该该为if(R[j].num == ar[i]) 但是仍然不行,能不能把这个程序你烤下去运行一下,我认为你自己写一个最好。
这道题就是给10个数,找出其中有多少个不同的数,并且计算出同一个数出现了几次。

方法:

数组第一个数储存起来,并把它出现的次数赋值为1,然后把后面的数依次与前面的比较,如果相同数出现的次数就加1,如果第一次出现就把它存储起来,并把出现的次数记为1;

在这主要涉及到循环的问题,如何循环是关键,因为用到的变量太多,我想用goto语句,但不是很好用。

#8
ecbtnrt2006-09-21 20:36
这道题应该不是很困难吧,我想还是自己解决好了,说不定又犯了一些傻傻的小问题。唉!
#9
ecbtnrt2006-10-04 20:20

还是用数组解决比较好
# include <iostream.h>
void count(int a[])
{
int i,res[10],n=10,s[10],ss[10],ii=0;
for(i=0;i<9;i++)
{
res[i]=0;
if(a[i]==0) continue;
++res[i];
s[ii]=a[i];
for(int j=i+1;j<10;j++)
{
if(a[i]==a[j])
{
++res[i];
a[j]=0;
}
}
ss[ii++]=res[i];
}
if(a[9]!=0)
{
s[ii]=a[9];
ss[ii++]=1;
}
for(i=0;i<ii;i++)
{
cout<<s[i]<<"\t"<<"出现:";
cout<<ss[i]<<"次"<<endl;
}
}
void main()
{
int a[10],i=0;

while(i<10)
cin>>a[i++];
count(a);

}

#10
★红狼2006-10-05 18:37
int t = 0; //这里t=0;
int m;
for(i=1; i<N; i++)
{
for(j=0; j<=t; j++) //这里 j<=t;那么这个循环有作用么?

if(R[j].num = =ar[i]) //少个=
R[j].tim ++;
else //错误
{
t ++;
R[t].num = ar[i];
R[t].tim = 1;
m = t;

我学的是C。不是C++。现在正在学C++。可是找了很多就是没C++的编译软件。找了个
Microsoft Visual Studio 2005 不懂怎么搞 项目。
也不知道怎么调。搞了6天了。
#11
攀登蜗牛2011-06-12 17:55
回复 楼主 ecbtnrt
#include <iostream.h>

const int N = 10;
void main()
{
struct
{
int num;
int tim;
}R[N];
int i;
int ar[N];
cout << "please input ten numbers : ";
for(i=0; i<N; i++)
cin >> ar[i];

R[0].num = ar[0];
R[0].tim = 1;
int j;
int  t=0,count=0;
int m;
for(i=1; i<N; i++)
{  
       for(j=0; j<=t; j++)
        if(R[j].num ==ar[i])
        {    R[j].tim ++;count++;}
       if(!count)
     {
      t++;
      R[t].num = ar[i];
      R[t].tim = 1;
      m = t;
      count=0;
     }
}
for(i=0; i<=m; i++)
cout << R[i].num << " " << R[i].tim << endl;
}
照着你的思路做的,验证了几个比较小的数,通过了。哈哈
1