我正在尝试为C++程序编写代码,该程序将获得一些数字(整数),并将它们放入一个100大小的数组中,在用户输入哨兵数字(101)后,将开始搜索可能给定的负数(给定正数的负数)。例如当我们给程序给定整数1、45、12、-32、103、2015和32时,它应该给我们给定整数32(因为它的负数形式存在),如果这个语句中没有数字,那么它将不打印任何内容。我写了如下的东西;但我不知道如何做剩下的…任何帮助或建议都将不胜感激。
我忘了说我使用代码块13.12.
#include <iostream>
using namespace std;
int number = 0, nCounter = 0, sentinel = 101, i;
int myArray[100];
int main (){
cout << "Please enter your numbers: " << endl;
while ( number != 101 ){
cin >> number;
myArray[0]= number;
nCounter += 1;
}
for ( i = 0; i <= nCounter; i++ ){
if (myArray[i] > 0) // I'm stuck at here!
}
return 0;
}
谢谢,请为可能出现的英语错误道歉。
以下是代码中的一些错误:
-
首先,将所有输入元素分配给数组的第0个索引元素。
-
用户可以很好地给出200个元素,而无需键入101,在这种情况下,您将超出数组大小。
一个简单的算法应该是这样的:
-
选取第i个正元素,并在数组中搜索其负元素。
-
对数组中每个可能的正元素重复1。
下面是一个工作示例。
输入应该是这样的:
while ( (nCounter < 100) && (number != sentinel) ) {
std::cin >> number;
myArray[nCounter]= number;
nCounter += 1;
}
检查条件:
for ( i = 0; i < nCounter; i++ ){
if (myArray[i] > 0) {
for( j = 0; j < nCounter; j++) {
if(myArray[i] + myArray[j] == 0) // positive and negative add up to 0
std::cout << myArray[i] << std::endl ;
}
}
}
这里有一个对代码的轻微修改,它将为您提供所需的
#include <iostream>
using namespace std;
int number = 0, nCounter = 0, sentinel = 101, i, negMatch;
int myArray[100];
int main (){
cout << "Please enter your numbers: " << endl;
while ( number != 101 ){
cin >> number;
myArray[nCounter]= number;
nCounter += 1;
}
cout << "Enter the number to negative match";
cin >> negMatch;
for ( i = 0; i < nCounter; i++ ){
if ( (myArray[i] + negMatch) == 0) {
cout << myArray[i];
return 0;
}
}
return 0;
}
请注意以下变化:
- 您将所有元素插入到第一个插槽中,我对其进行了更改,以便您在正确的位置输入它们
- 获取要匹配的数字作为输入(negMatch在您的问题中为"32")
- 修改循环以检查数字
然而,这个计划并不理想。理想情况下,您应该使用类似Vectors的东西,它可以动态增长。此外,最好让用户输入数字的计数,而不是使用他可能想要提供的哨兵数字作为输入。
如果我理解正确,你想打印负号但带正号的。有了这个简单的代码,你就可以做到了!
#include <iostream>
using namespace std;
int number = 0, nCounter = 0, sentinel = 101;
int myArray[100];
int main (){
cout << "Please enter your numbers: " << endl;
while ( (nCounter < 100) && (number != sentinel) ) {
std::cin >> number;
myArray[nCounter]= number;
nCounter += 1;
}
for (int i = 0; i < nCounter; i++ ){
if (myArray[i] < 0) {
std::cout << (myArray[i] * -1) << std::endl ;
}
}
return 0;
}
减少计算成本的一个简单改变是:你可以尝试从读取时给出的数字中获取信息
#include <iostream>
#include <vector>
using namespace std;
int number = 0, sentinel = 101;
int main (){
cout << "Please enter your numbers: " << endl;
vector<int> array;
while (number != sentinel) {
std::cin >> number;
if(number < 0)
array.push_back(number);
}
for (int i = 0; i < array.size(); i++ )
std::cout << (array[i] * -1) << std::endl ;
return 0;
}
我建议在数组的开头写正数,在数组的末尾写负数。
这是一个演示程序
#include <iostream>
int main()
{
const size_t N = 100;
const int SENTINEL = 101;
int a[N];
int number;
size_t positive_end = 0;
size_t negative_begin = N;
for ( size_t i = 0; i < N && std::cin >> number && number != SENTINEL; i++ )
{
if ( number < 0 )
{
a[--negative_begin] = number;
}
else
{
a[positive_end++] = number;
}
}
if ( positive_end != 0 && negative_begin != N )
{
for ( size_t i = 0; i < positive_end; i++ )
{
size_t j = negative_begin;
while ( j != N && a[i] + a[j] != 0 ) ++j;
if ( j != N ) std::cout << a[i] << 't' << a[j] << std::endl;
}
}
return 0;
}
例如,如果输入以下数字序列
1 2 -3 4 -5 6 7 3 -9 9 101
那么输出将是
3 -3
9 -9
还可以对数组的每个部分(正数部分和负数部分)进行排序,并应用标准算法std::set_intersection
。在这种情况下,您可以排除一个负数对应多个正数的情况。:)
您没有对代码的逻辑给予足够的关注。我假设你在这方面很新,但在看到你的程序做什么之前,没有人愿意输入100个输入。以下是您的代码出现的问题:
#include <iostream>
using namespace std;
int number = 0, nCounter = 0, sentinel = 101, i; // OK
int myArray[100]; // OK, an array with 100 elements
int main (){
cout << "Please enter your numbers: " << endl;
while ( number != 101 ){ //this is where you got it wrong
// this should have been nCounter instead of number
// If you are looking at 100 elements then the condition
// should be "nCounter != 100"
cin >> number;
myArray[0]= number; // this should have been "myArray [nCounter]=number;"
nCounter += 1;
}
for ( i = 0; i <= nCounter; i++ ){ // defining i from outer scope is unnecessary
// since it is only used in the for loop
if (myArray[i] > 0) // I'm stuck at here! // Put a semicolon here
// the remainder of the code probably here
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
//initialize size and empty array
int size = 10, x;
int myArray[10] = {};
//enter integers into array
for (int i = 0; i < size; i++)
{
cin >> myArray[i];
}
//search array for negative numbers
for (int i = 0; i < size; i++)
{
if (myArray[i] < 0)
{
x = (myArray[i] * (-1)); //multiply by -1 to get (+)
cout << x << ' ';
}
}
return 0;
}