Help me in solving GFTSHP problem

My issue

Code 1

#include <iostream>
#include <bits/stdc++.h>
#include <cmath>
using namespace std;

int main() {
	int t;
	cin>>t;
	while(t--){
	    int n,k;
	    cin>>n>>k;
	    int arr[n];
	    for(int i=0;i<n;i++){
	        cin>>arr[i];
	    }
	    sort(arr, arr+n);
	    int count=0;
	    for(int i=0;i<n;i++){
	        k-=arr[i];
	        count=i;
	        if(k<=0){
	            k+=arr[i];
	            k-= ceil(double(arr[i])/2.00);
	            if(k<=0){
	                count-=1;
	                break;
	            }
	        }
	    }
	    cout << count+1 << endl;
}
	return 0;
}

Code 2 :

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main() {
	int t,n,k,count;
	cin>>t;
	while(t--){
	    count=0;
	    cin>>n>>k;
	    int a[n];
	    for(int i=0;i<n;i++){
	        cin>>a[i];
	    }
	    sort(a,a+n);
	    for(int i=0;i<n;i++){
	        if(k>=a[i]){
	            k=k-a[i];
	            count++;
	        }
	        else{
	            if(k>=(a[i]+1)/2){
	                count++;
	                break;
	            }
	        }
	    }
	    cout << count << endl;
	}
	return 0;
}

Please Tell me why code 1 fails but code 2 passes while both uses the same logic just in two different ways.
Problem Link: CodeChef: Practical coding for everyone

@jk21102
in 1st code your code says u can apply discount coupon many time but in the prb it is said that it can be applied only once.
that is why u r getting wa