问题描述
public void moveZeroes(int[] nums) {
// [0,1,3,12]
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
j++;
}
}
}
维基百科说,一个木马没有收到任何输入,因此,我知道,从文件中读取自己的源代码的程序不算在内。上面的程序确实只是读取了自己的源代码并将其打印到标准输出,但这是程序本身的一部分。传统的奎因通常还会在相同的位置嵌入字符串,如果涉及特别激进的优化器,甚至可能会将整个源代码/输出嵌入其中。
该程序确实从文件中加载其源代码以显示它...但是它是在编译时加载的,因此该程序仍不接受输入。那是不是奎奴呢?
解决方法
根据我收到的评论,我的理解是,不,从通常的意义上讲,它不会被视为奎因。
我认为最强的一点是@ 12431234123412341234123提出的观点:程序一旦编译,就不能说编译后的形式会输出自身,因为“自身”是二进制文件,并且会输出C源代码。因此,无论如何,编译后的二进制文件将不会成为问题。源代码也不是,因为.incbin
行从文件中加载了源代码。 (无关紧要在编译时发生,因为源代码需要进行编译才能运行。)
无论如何,(正如@Raymond Chen指出的那样)它不适合奎因的精神,并且(如@ n.'pronouns'm。指出的)没有明确的“法律文书”适合。最重要的是,它取决于您使用的定义。