#include <iostream>
usingnamespace std;
int main (int argc, constchar * argv[])
{
int n;
int p;
int num=1;
int count =0;
int result=0;
cin >> n;
for(int i = 0 ; i < n ; i++){
cin>> p;
while( true){
result = num * num;
if( result > p) break;
num++;
count++;
}
cout << count <<endl;
}
}
2
5
2
100
10
A certain prison contains a long hall of n cells,
each right next to each other. Each cell has a
prisoner in it, and each cell is locked.
One night, the jailer gets bored and decides to play
a game. For round 1 of the game, he takes a drink of
whiskey, and then runs down the hall unlocking each
cell. For round 2, he takes a drink of whiskey, and
then runs down the hall locking every other cell
(cells 2, 4, 6, ...). For round 3, he takes a drink
of whiskey, and then runs down the hall. He visits
every third cell (cells 3, 6, 9, ...). If the cell is
locked, he unlocks it; if it is unlocked, he locks it.
He repeats this for n rounds, takes a final drink, and passes out.
Some number of prisoners, possibly zero, realizes that
their cells are unlocked and the jailer is incapacitated. They immediately escape.
Given the number of cells, determine how many prisoners
escape jail.
Input
The first line of input contains a single positive integer.
This is the number of lines that follow. Each of the following
lines contains a single integer between 5 and 100, inclusive,
which is the number of cells n.
Output
For each line, you must print out the number of prisoners that
escape when the prison has n cells.
#include <iostream>
inlineint integral_sqrt( int n ) // invariant: n > 0
{
int r = 1 ;
while( r*r <= n ) ++r ;
return r-1 ;
}
int main()
{
int num_lines ;
if( std::cout << "# input lines? " && std::cin >> num_lines )
for( int i = 0 ; i < num_lines ; ++i )
{
int num_cells ;
if( std::cout << "# cells? " && std::cin >> num_cells && num_cells > 0 )
std::cout << "# prisoners that escape: " << integral_sqrt(num_cells) << '\n' ;
}
}
An analytical solution to this modified problem is a lot more interesting:
... He repeats this for m rounds (1 <= m <= n), takes a final drink, and passes out. ... Given the number of cells n, and the number of rounds m, determine how many prisoners
escape jail.