这个程序有啥问题,为什么输进去之后没有反应了,是进不了循环还是出不了循环啊
使用函数求奇数和:输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数even(n)判读数的奇偶性,当n为偶数时返回1,否则返回0.
在while循环内,还要添加scanf语句啊。否则只是在while开始前接收了一个整数而已,然后whlie(1)就死循环了
在while循环内最后一行加上scanf("%d",&n);
刚才我们看到了,因为题目要求删除的是倒数第n个结点,所以上面的方法都是先要求出链表的长度,再通过长度求出要删除结点的下标,那我们能不能再不求出链表长度的情况下成功删除该结点呢?
💖我们其实想象一下我们的链表其实是分为两个部分的:倒数第n个结点前面是一部分,倒数第n个结点后面又是一部分。而双指针法正是利用了这个特性来做的。
📝你看,如果我们fast和slow这两个结点引用变量一开始都分别指向我们的虚拟头结点,如果fast先移n个结点,那么是不是此时fast到链表结尾的距离就是我们从虚拟头结点到倒数第n个结点的距离了。
📝那么我们就可以先让fast先移动n步,然后fast和slow再同时开始移动,直到fast指向了链表的结尾,此时slow不就指向了我们要删除的那个结点了吗?
🔔 但要注意的是我们删除结点一般都是要找到该结点的前一个结点,所以我们的fast先要移动n+1步,以便之后让我们的slow指向要删除结点的前一个结点。
public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummyHead = new ListNode(0, head); // 定义一个虚拟头结点,并将它指向头结点,这样删除头结点时就不用再专门考虑了 ListNode fast = dummyHead, slow = dummyHead; // 定义两个快慢指针,分别指向该虚拟头节点 for(int i = 0; i < n + 1; ++i) { // fast先移动n+1步 fast = fast.next; } while (fast != null) { slow = slow.next; fast = fast.next; } // 此时slow指向要删除的结点的前一个结点 slow.next = slow.next.next; return dummyHead.next; // 返回头结点 }
小伙伴们,都看到这里了,是不是已经迫不及待的想刷题了,一起冲呀!!!
n = int(input("请输入正整数的数量:"))
nums = []
sum = 0
for i in range(n):
x = int(input("请输入第%d个正整数:" % (i+1)))
nums.append(x)
for num in nums:
if num % 2 == 1:
sum += num
print("所有奇数的和为:%d" % sum)
函数没有反应可能是因为程序没有传递正确的参数,或者是函数定义中有问题。需要进一步了解程序运行的环境、函数的定义方式和输入数据的类型等。比如如果函数是通过命令行参数传递参数,那么需要检查命令行的格式是否正确;如果是通过GUI界面传参,需要检查界面相应控件的属性是否设置正确;如果函数是从其他模块导入的,需要检查导入的方式和目标函数的定义是否正确等等。如果不确定具体原因,可以尝试在函数中打印日志或调试,找出问题所在并解决它。
对于一个函数的定义和调用,程序需要输入函数的参数,并根据函数的返回值进行后续处理。具体来说,输入格式应当符合函数定义中的参数类型和数量要求,如果有默认值则可以不用输入该参数。函数的返回值可以是单个值、元组、字典或其他类型,需要按照函数定义的返回值类型进行处理。代码示例如下:
def multiply(a, b=1):
return a * b
#调用函数
result = multiply(3, 5) #result的值为15
result2 = multiply(3) #result2的值为3