为了账号安全,请及时绑定邮箱和手机立即绑定

奇数序列替换为计数

奇数序列替换为计数

撒科打诨 2021-08-25 10:56:07
我正在研究 Java 程序这是程序问题:考虑 Java 程序。它从标准输入中读取整数(直到它得到一个负数)并将它们放入一个数组中。之后它在数组上调用 processArray,然后在标准输出上打印数组的内容。在程序中,数组中任何两个或多个连续奇数的序列都会从数组中移除,并替换为代表该序列长度的单个数字。processArray 函数/方法应该就地修改数组(最好不要创建新数组),并且它应该返回修改后数组的新长度。例如,如果这些数字是在标准输入中提供的:222335621246129375667-1然后程序应该打印:2222621243667请注意,序列 3、35 已被 2 替换,而序列 61、29、375 已被 3 替换。这是我的代码:import java.util.*;import java.io.*;public class Main {    public static int processArray(ArrayList<Integer> array) {        ListIterator<Integer>iterator=array.listIterator();        while (iterator.hasNext()) {            Integer integer = (Integer) iterator.next();            int count=0;            if (integer%2!=0) {                count=count++;                iterator.remove();                continue;            }            if(integer==-1)                break;            else                iterator.previous();            iterator.add(count);            iterator.next();        }        return array.size();    }    public static void main (String[] args) {        ArrayList<Integer> arrayList = new ArrayList<Integer>();        Scanner in = new Scanner(System.in);        while(in.hasNextInt()) {            int num = in.nextInt();            if (num < 0)                 break;            arrayList.add(new Integer(num));        }        int new_length = processArray(arrayList);        for(int i=0; i<new_length; i++)            System.out.println(arrayList.get(i));    }}我的逻辑无法正常工作有助于提高逻辑
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

试试下面的逻辑。


public static int processArray(ArrayList<Integer> array) {

    int count=0;

    for(int i=0;i<array.size();i++)

    {

        if((array.get(i)%2)!=0) //odd

        {

            count++;

            if(count>1)     //I had to replace length of  odd seq greater than or equal to 2

            {

                array.set(i,count);     //set curren count to current odd no and remove previous odd number

                array.remove(i-1);

                if(i>0)     //For handling change in indices

                    i=i-1;

                else

                    i=0;

            }

        }

        else

        {

            count=0;

        }

    }

    return array.size();

}


查看完整回答
反对 回复 2021-08-25
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

试试下面的 Python 代码:首先用计数替换最后一个连续的奇数,然后用 -1 替换前面的奇数。最后,从列表中删除所有 -1。


原因:用-1代替连续的奇数来遍历整个列表会很方便,否则数字的结构和索引会改变并且难以迭代。


l=[222,3,35,62,124,61,29,375,66,7,-1]

count = 0

for i in range(0,len(l)):

    if l[i]%2!=0 and i!=len(l)-1:

        count +=1

    else:

        if count > 1:

            l[i-1]=count

            while count != 1:

                l[i-count]= -1

                count -= 1

        count = 0

l = [i for i in l if i>=0 ]


print(l)

输出:[222, 2, 62, 124, 3, 66, 7]


查看完整回答
反对 回复 2021-08-25
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

  • 您应该在 processArray() 中添加另一个循环,该循环在找到奇数时执行并增加计数

  • 在循环之前将号码存储为备份

  • 然后在添加之前检查计数是否大于 1 然后用计数替换数字,否则使用备份整数

    您还应该保存第一个奇数的迭代器位置。


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信