Go: package main

import (
    "fmt"
    "math"
)

func main() {
    var e int
    for {
        fmt.Scan(&e)
        if e == 0 { break }

        var ans float64 = float64(e)
        for z := 0; z <= 101; z++ {
            for y := 0; y <= 1001; y++ {
                x := e - y*y - z*z*z
                if (0 <= x && x <= 100000) {
                  ans = math.Min(ans, float64(x+y+z));
                }
            }
        }
        fmt.Println(ans)
    }
}

C++: #include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <stack>
#include <queue>
//ranker
using namespace std;

#define REPS(i, a, n) for (int i = (a); i < (n); ++i)
#define REP(i, n) REPS(i, 0, n)
#define RREP(i, n) REPS(i, 1, n + 1)
#define DEPS(i, a, n) for (int i = (a); i >= n; --i)
#define DEP(i, n) DEPS(i, n, 0)

using ll = long long;
using ull = unsigned long long;
using vi = vector<int>;
using vvi = vector<vi>;
using vvvi = vector<vvi>;
using pii = pair<int, int>;
using pis = pair<int, string>;
using psi = pair<string, int>;
using D = double;

void merge (int *first1, int *last1, int *first2, int *last2){
    int size1 = last1 - first1;
    int size2 = last2 - first2;
    int *result = new int[size1+size2];
    int i = 0;
    int j = 0;
    int index = 0;
    while (true){
        if (i < size1 && (first1[i] <= first2[j] || j >= size2)){
            result[index] = first1[i];
            ++i; ++index;
        }
        if (j < size2 && (first1[i] > first2[j] || i >= size1)){
            result[index] = first2[j];
            ++j; ++index;
        }
        if (i==size1 && j==size2){
            for (i=0; i<size1; ++i) first1[i] = result[i];
            for (j=0; j<size2; ++j) first2[j] = result[j+size1];
            delete[] result;
            return;
        }
    }
}
void MergeSort (int *first, int *last){
    int size = last - first;
    if(size <= 1) return;
    MergeSort(first, first+size/2);
    MergeSort(first+size/2, last);
    merge(first, first+size/2, first+size/2, last);
}


int gcd(int a, int b)
{
    int c;

    if (a < b) {
        a+=b; b=a-b; a-=b;
    }

    while (b != 0) {
        c = a % b;
        a = b;
        b = c;
    }

    return a;
}

int isPrime(int x){
  int i;
  if(x < 2) return 0;
  else if(x == 2) return 1;
  if( x%2 == 0) return 0;
  for(i = 3; i*i <= 2; i += 2){
    if(x%i == 0) return 0;
  }
  return 1;
}


const int pmax = 10000000;
bool isPrime_table[pmax];
//const???????????¨????????£?¨???§?????????

void eratos(void){
  int i, j;
  double sqrtmax=sqrt(pmax);

  REP(k, pmax) isPrime_table[k] = true; /* Initialization */

  /* Sieve process  */
  isPrime_table[0] = false;
  isPrime_table[1] = false;
          /* 0 and 1 are not prime. */
  for (i=2; i <= sqrtmax; i++){
    if (isPrime_table[i]==true){   /* i is prime. */
      for (j=i; i*j<pmax; j++){
        isPrime_table[i*j] = false; /* multiples of i are not prime. */
      }
    }
  }
}

//????????????????¨???°?????????
//abs(dx[i]+dy[j])==1??§??????
int dx[3]={-1, 0, 1};
int dy[3]={-1, 0, 1};
int W0, H0;
int  masu0[100][100]={0};
int cnt0;

int dfs(int a, int b){
  masu0[a][b] = 2;
  REP(i, 3)REP(j, 3){
    a = a+dx[i];
    b = b+dy[j];
    if(masu0[a][b]== 1 && a >= 0 && a < W0 && b >= 0 && b < H0){
    dfs(a, b);
  }
  }
  return 1;
}

//????????????????????????str.substr(i, 5)
//????????°????????? stoi, stod ??¨to_string

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  eratos();

  int e;
  while(1){
    cin >> e;
    if(e == 0) break;
    int min = 1000000;
    REP(z, 100) REP(y, 1000) if(e-y*y-z*z*z+z+y >= 0 && e-y*y-z*z*z >= 0){
      if(min > e-y*y-z*z*z+z+y){
        min = e-y*y-z*z*z+z+y;
      }
    }
    cout << min << endl;
  }
  return 0;
}

C++: #include<bits/stdc++.h>
#define range(i,a,b) for(int i = (a); i < (b); i++)
#define rep(i,b) range(i,0,b)
#define pb(a) push_back(a)
#define all(a) (a).begin(), (a).end()
#define debug(x) cout << "debug " << x << endl;
using namespace std;

int main(){
    int e;
    while(cin >> e, e){
        int i,j,k,ans = 1000000;
        for(i = sqrt(1000000); i >= 0; i--){
            if(i * i * i > e) continue;
            for(j = sqrt(1000000 - i * i * i) ; j >= 0; j--){
                if(i * i * i + j * j > e) continue;
                k = e - i * i * i - j * j;
                ans = min(ans, i + j + k);
            }
        }
        cout << ans << endl;
    }
}

C++: #include <iostream>
#include <cmath>
using namespace std;

int main(){
    int n;
    while(cin >> n, n){
        int ans = 1000000;
        for(int i=0; i < 1000; i++){
            for(int j=0; j < 100; j++){
                if(n-pow(i, 2)-pow(j, 3) < 0) continue;
                ans = min(ans, i+j+(int)(n-pow(i, 2)-pow(j, 3)));
            }
        }
        cout << ans << endl;
    }
}

C++: #include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int main()
{
  while (true) {
    int e;
    cin >> e;
    if (e == 0) break;
    bool flag = false;
    for (int m = 1;;m++) {
      for (int k = 0; k <= m; k++) {
	for (int j = 0; j <= m - k; j++) {
	  int i= m - k - j;
	  if (k * k * k + j * j + i == e) {
	    cout << m << endl;
	    flag = true;
	    break;
	  }
	  if (flag) break;
	}
	if (flag) break;
      }
      if (flag) break;
    }
  }
  return 0;
}

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

int main() {
	int e;
	while(cin >> e && e != 0) {
		int x,y,z;
		int ans = INT_MAX;
		for(z=0;z*z*z <= e;z++) {
			for(y=0;y*y<=e-z*z*z;y++) {
				x = e - z*z*z - y*y;
				if(x+y+z < ans)
					ans = x+y+z;
			}
		}
		cout << ans << endl;
	}
}

C++: #include<stdio.h>
#include<math.h>
int main(){


int E;
while(1){
scanf("%d",&E);if(E==0)break;
int min=E;int m=E,max=0;
int i=1;int y=0,z=0;
for(int j=0;j<=sqrt((double)(E));j++){
for(int k=0;k<=pow((double)E,1.0/3.0);k++)
{i=E-j*j-k*k*k;//printf("%d %d %d\n",i,j,k*k*k);
	//if(i+j*j+k*k*k>E)break;
	if(i>=0&&i+j*j+k*k*k==E&&i+j+k<min){min=i+j+k;max=j*j+k*k*k;y=j;z=k;}
}}
i=E-y*y-z*z*z;
m=i+y+z;
printf("%d\n",min);
}
return 0;
}

C++: #include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
using ll =  long long ;
using P = pair<int,int> ;
const int INF = 1e9;
const int MOD = 1000000007;

int main(){
    while(1){
        int E;
        cin >> E;
        int mn = INF;
        if(E==0) break;
        for(int z=0;z*z*z<=E;++z){
            int z3 = z*z*z;
            for(int y=0;y*y<=E-z3;++y){
                int y2 = y*y;
                int x = E - z3 - y2;
                if(x < 0) continue;
                mn = min(mn,y+z+x);
            }
        }
        cout << mn << endl;
    }
    return 0;
}

C++: #include<stdio.h>
#include<limits.h>
#include<vector>
#include<algorithm>
const int N = 1000001;
int a[N],i,j,e,V=INT_MAX;
int main()
{
	for(i=0;i<N;++i)a[i]=V;
	std::vector<int>c,s;	//§ûA½û
	for(i=0;e=i*i,e<N;++i)s.push_back(e);		//0à1àÜÜ¹éÌª~\
	for(i=0;e=i*i*i,e<N;++i)c.push_back(e);
	for(i=0;i<s.size();++i)for(j=0;j<c.size()&&s[i]+c[j]<N;++j)e=s[i]+c[j],a[e]=std::min(a[e],i+j);
	while(scanf("%d",&e),e)
	{
		for(i=0;a[e-i]==V;)++i;
		printf("%d\n",a[e-i]+i);
	}
	return 0;
}