В следующем коде, когда я удаляю оператор cout (строка после // ******), он вызывает изменение значения «i».Я использовал 32-разрядную версию TDM-GCC 4.9.2 и компиляторы TDM-GCC 5.1.0.Я запустил этот код на codechef, и там он работает нормально, и оператор cout не влияет на значение «i».
#include<iostream>
using namespace std;
int subset(int [], int);
int main()
{
int size,i,ans;
cout<<"size of array : ";
cin>>size;
int arr[size];
for(i = 0 ; i<size;i++)
{
cin>>arr[i];
}
ans = subset(arr,size);
cout<<"ans = "<<ans;
return 0;
}
int subset(int arr[], int size)
{
int i,j, tsum=0, completed=0;
for(i = 0 ;i<size;i++)
tsum = tsum + arr[i];
int carr[tsum+1],temp;
for(i=0;i<size;i++)
{
temp = arr[i];
carr[temp] = 1;
for(j=i+1;j<size;j++)
{
temp = temp + arr[j];
carr[temp] = 1;
}
}
for(i=1;i<=tsum;i++)
{
if(carr[i]!=1)
{
//************************************
cout<<"i : "<<i<<endl;
break;
}
}
return i;
}
Пример ввода: размер массива: 3
1 2 5
пример вывода без оператора cout:
ans = 6
пример вывода с оператором cout:
i: 4
ans =4
Фактический ответ 4 для ввода.