某人有5张3分和4张5分的邮票,请编写一个程序,计算由这些邮票中的1张或若干张可以得到多少种不同的邮资.
我的程序是这样的,可是没有考虑会组成相同的邮资,public class Youzi
{
public static void main(String[]args)
{
int i,j,k=0,s,count=0;
int a[]=new int[30];
for(i=0;i<=5;i++)           //i:取三分邮票的张数
for(j=0;j<=4;j++)       //j:取5分邮票的张数
{
s=i*3+j*5;          //计算组成的邮票面值
此行有错误 for(k=0;a[k];k++)   //查找是否有相同的邮资 if(s==a[k])break;
else  //没有找到相同的邮资则满足要求存入数组
{
a[k]=s; 
count++;
}
}
System.out.println("一共有"+count+" 种不同的邮资"); //输出结果
System.out.println(a[k]);
}
}
运行提示有错误,找到: int 需要: boolean  for(k=0;a[k];k++)   请高手指点

解决方案 »

  1.   

    Java和C不一样,不能拿整数当布尔用。
    for(k=0; a[k]>0; k++)
    这样写
      

  2.   

    哦,下面还有逻辑错。
    邮资存数组这个事情不应该在循环里面做,要在外面做。这样改 s = i * 3 + j * 5; // 计算组成的邮票面值
    for (k = 0; a[k] > 0; k++)
    // 查找是否有相同的邮资
    if (s == a[k])
    break;
    if (k==count && s>0) {
    a[k] = s;
    count++;
    }
      

  3.   


    public class Stamp { public static void main(String[] args) {
    System.out.println(test(5, 3, 4, 5));
    }

    public static int test(int count_i, int i, int count_j, int j){
    int[] nums1 = new int[count_i];
    int[] nums2 = new int[count_j];
    Set<Integer> set = new HashSet<Integer>();
    for (int k = 0; k < count_i; k++) {
    nums1[k] = i * (k + 1);
    set.add(nums1[k]);
    }
    for (int k = 0; k < count_j; k++) {
    nums2[k] = j * (k + 1);
    set.add(nums2[k]);
    }

    for (int k = 0; k < nums1.length; k++) {
    for (int index = 0; index < nums2.length; index++) {
    set.add(nums1[k] + nums2[index]);
    }
    }
    return set.size();
    }
    }