Ocorrência de digitos

Um exercício tipico de programação é contar quantos digitos 1 existem entre quaisquer dois números. Por exemplo entre os números 10 e 20 existem 11 dígitos 1 . Como podemos fazer um programa para resolver este problema? A solução, mais interessante, passa certamente por criar uma string de saída e após conseguirmos a string de saída fazer um ciclo for para contar os dígitos 1 que estão presentes nessa string. O principal problema é o seguinte: é fácil converter strings em inteiros mas não é tão óbvio fazer o contrário, ou seja converter inteiro em string.

A solução passa por trabalhar com um recurso de nome string stream e a ideia é a seguinte: esta variável comporta-se como um cout, mas enquanto o cout dirige a saída para a consola esta variável vai guardando a saída. Para usarmos uma variável deste tipo necessitamos de fazer um include  <sstream>

Eis o programa:

#include "stdafx.h"
#include "string"
#include "iostream"
#include <sstream>
using namespace std;
int main(){

    int a,i,b, cont,tamanho;
    ostringstream aux;
    string fim;
    fim="";
    cont=0;
    cin>>a>>b;
    for(i=a;i<=b;i++){
      aux<<i;      
    }
    fim=aux.str();
tamanho=fim.length();
for(i=0;i<tamanho;i++){
    if(fim[i]=='1'){
        cont++;
    }
}
cout<<cont;
    system("pause");
    return 0;
}

 

 Repare que a variável aux vai enchendo com o ciclo for e depois  a variável fim, que é uma string, vai apanhar o seu valor. A parir daqui já temos uma string que podemos trabalhar para conseguir apanhar todos os 1. 

Palavras intercaladas

O seu programa deve ler 2 palavras e combiná-las da seguinte forma: 1 primeira letra de uma, seguida da primeira letra da segunda, depois a segunda letra da primeira, seguidamente a 2ª letra da segunda etc...
input
casa barata
output
cbaasraata

Eis uma proposta de solução:

//#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;


int main()
{
	string a,b;
	int c,d,i;
	cin>>a;
	cin>>b;
	c=a.length();
	d=b.length();
	if(c>d){
		for(i=0;i<d;i++){
			cout<<a[i]<<b[i];
		}
		for(i=d;i<c;i++){
			cout<<a[i];
		}
	}
	if(c<d){
		for(i=0;i<c;i++){
			cout<<a[i]<<b[i];
		}
		for(i=c;i<d;i++){
			cout<<b[i];
		}
	}
	if(c==d){
		for(i=0;i<c;i++){
			cout<<a[i]<<b[i];
		}
	}
	//system("pause");
	return 0;
}

 

Sequência dançante

Uma frase diz-se ter um sequência dançante se inicia com um caracter maiusculo e o seguinte é minusculo e assim sucessivamente ignorando o espaço.
O seu programa deve devolver 1 ou 0 consoante se trate ou não de uma sequência dançante.
input
A cAsA dO aBeL eStA fEcHaDa
output
1

Proposta de solução:

#include "iostream"
#include "string"
using namespace std;


int main()
{
	int i, semaforo,meio;
	string frase,boi;
	semaforo=0;
	boi="";
	getline(cin,frase);
	meio=frase.length();
	for(i=0;i<meio;i++){
		if(frase[i]!=' '){
		boi=boi+frase[i];
		
		}
	}
	meio=boi.length();

	for(i=0;i<meio-1;i++){		
	if((int(boi[i])>=65 && int(boi[i])<=90) && (int(boi[i+1])>=97 && int(boi[i+1])<=122)){
		semaforo=1;
		i++;
	}else{
		semaforo=0;
		break;
	}	
		
	}

	if(semaforo==1){
		cout<<1;
	}
	if(semaforo==0){
		cout<<0;
	}
	return 0;
}

 

 

Separa palavras numa frase

O programa seguinte separa palavras numa frase e devolve-as uma em cada linha.

input
eu gosto de c++
output
eu
gosto
de
c++

Eis uma proposta de código:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){	
string frase,final,palavra[10];
int i,tam,l;
getline(cin,frase);
tam=frase.length();
final="";
l=0;
for(i=0;i<tam;i++){
	if(frase[i]!=' '){
			final=final+frase[i];
	}
	if (frase[i]==' ' || i==tam-1){
		palavra[l]=final;
		final="";
		l++;
	}
}
for(i=0;i<=l;i++){
	cout<<palavra[i]<<"\n";
}
	system("pause");
	return 0;
}

 

Soma de 2 números em binário

O objetivo deste programa é somar dois números em binário. Numa primeira fase o programa verifica se os dois números têm o mesmo tamanho e caso isso não seja verdade ajusta o tamanho do menor para que fique com o tamanho do maior. Eis uma proposta de solução:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{	
string a,b;
int i,numero,dif,letras,letras1,resto[10],resposta[10];
for(i=0;i<8;i++){
	resto[i]=0;
}
cin>>a>>b;
letras=a.length();
letras1=b.length();
//----------------
if(letras<letras1){
		dif=letras1-letras;
		for(i=1;i<=dif;i++){
			a='0'+a;
		}
}
letras=letras1;
if(letras1<letras){
		dif=letras-letras1;
		for(i=1;i<=dif;i++){
			b='0'+b;
		}
}
letras1=letras;
//--------------
for(i=letras-1;i>=0;i--){
	numero=a[i]-'0'+b[i]-'0';
	if(i==0){
			if(numero+resto[i]<=1){
				resposta[i]=numero;
			}
			if(numero+resto[i]==2){
				resposta[i]=10;
			}
			if(numero+resto[i]==3){
				resposta[i]=11;	
		}
	//----------fim da ultima linha
	}else{
	if(numero+resto[i]<=1){
		resposta[i]=numero;
	}
	if(numero+resto[i]==2){
			resposta[i]=0;
			resto[i-1]=1;
	}
	if(numero+resto[i]==3){
			resposta[i]=1;
			resto[i-1]=1;
	}
}
}
for(i=0;i<letras;i++){
	cout<<resposta[i];
}
	system("pause");
	return 0;
}

 

 

Binário para decimal

O programa seguinte converte um número de binário para decimal.

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int potencia (int exp);
int _tmain(int argc, _TCHAR* argv[])
{	
	int decimal,i,numeros;
	string binario;
	cin>>binario;
	decimal=0;	
	numeros=binario.length();
	for(i=0;i<numeros;i++){
		if(binario[i]=='1'){
			decimal=decimal+potencia(numeros-i-1);
		}
	}
	cout<<decimal;
	system("pause");
	return 0;
}
int potencia(int exp){
	int i,total;
	total=1;
	for(i=1;i<=exp;i++){
		total=2*total;
	}
	return total;
}

 

 

De mãos dadas às amoras

Os alunos foram todos dar um passeio pelas montanhas. Iam aos grupos de 2 alunos de mão dada cada qual com um cesto para trazer amoras, porque nas montanhas há muitas amoras.
O problema é que os cestos têm peso diferente e não temos forma de saber quantos quilos apanhou cada um.
Finalmente alguém teve uma ideia genial que é a seguinte:
1. Pesam-se os cestos individualmente com as amoras que colheram.
2. Colocam-se todas as amoras num cesto e volta a fazer-se a pesagem.
3. Colocam-se todas as amoras no outro cesto e repete-se a pesagem.
Assim, conseguimos saber quantos quilos de amoras apanhou cada um de vós.
input
1 2
2 1 
0 3
output
1 1

Eis uma proposta de solução:

//#include "stdafx.h"
//#include "string"
#include "iostream"
using namespace std;


int main()
{
	int a,b,c,d,e,f,h,j;
	cin>>a;
	cin>>b;
	cin>>c;
	cin>>d;
	cin>>e;
	cin>>f;
	h=b-d;
	j=f-b;
	cout<<j<<" "<<h;
	//system("pause");
	return 0;
}

 

Joana e os números ímpares

A Joana gosta de números ímpares e escreve-os da seguinte forma:

1

3 5 7

9 11 13 15 17

19 21 23 25 27 29 31

...

Numa determinada linha a Joana escreveu 55 números ímpares. Quanto é a soma dos últimos 3 números dessa linha?

Proposta de resolução:

Repare-se que em cada linha o último número ímpar é obtido da seguinte forma:

linha fórmula
1 1*1
2 2*2+1
3 3*3+2
4 4*4+3

Então para a linha que contém 55 números ímpares o último ímpar será obtido pela expressão:

55*55+54=3079

A soma que procuramos é 3079+3077+3075= 9231

 

 

Ataque em cunha

Temos uma estratégia de ataque bestial
A nossa estratégia de ataque é baseada numa cunha. Ou seja os nossos soldados atacam em várias linhas e como somos grandes estrategas o nosso ataque em cunha funciona assim.
*
**
***
****
*****
Vamos construir um programa de leia o número de linhas e devolva o número de soldados da nossa força.
input
5
output
15

#include "stdafx.h"
#include "iostream"
using namespace std;

int main()
{
	int i,soma,a;
	cin>>a;
	soma=0;
	for(i=a;i>0;i--){
		soma=soma+i;
	}
	cout<<soma;
	//system("pause");
	return 0;
}

 

Nascidos na China

Nascidos na China 

Os bebés na China são pesados segundo dois caracteres que designaremos por A e B. Assim, o A vale 0.5Kg e o B vale 0.05Kg. Assim um bebé que pese 5A2B pesa 5x0.5+2*0.05 ou seja 2.6kg.

O seu programa deve ler o peso de um bebé em formato chinês e devolver o peso em Kg.
input
5A2B
output
2.6

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main()
{
	string a;
	cin>>a;
	if(a[1]=='A' && a[3]=='B'){
		cout<<(a[0]-'0')*0.5+(a[2]-'0')*0.05;
	}
	if(a[1]=='A' && a[3]=='A'){
		cout<<(a[0]-'0')*0.5+(a[2]-'0')*0.5;
	}
	if(a[1]=='B' && a[3]=='A'){
		cout<<(a[0]-'0')*0.05+(a[2]-'0')*0.5;
	}
	if(a[1]=='B' && a[3]=='B'){
		cout<<(a[0]-'0')*0.05+(a[2]-'0')*0.05;
	}
	//system("pause");
	return 0;
}

 

Palavras umas dentro de outras

Estou dentro de outra palavra

O seu programa deve ler um conjunto de letras e mostrar as que são compostas a partir de outras.
input
casa
casamento
rua
pirata
biruta
arruamento
99
output
casamento
arruamento

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main(){
	int i,j,pos;
string b[10];
for (i=0;i<5;i++){
	cin>>b[i];
}
for (i=0;i<5;i++){
	for(j=i+1;j<=4;j++){
		if(b[i].length()>b[j].length()){
				pos=b[i].find(b[j]);
				if(pos>=0){
					cout<<b[i]<<"\n";
				}
		}else{
				pos=b[j].find(b[i]);
				if(pos>=0){
					cout<<b[j]<<"\n";
			}
		}
		
	}
}
system("pause");
return 0;
}

 

 

Números felizes

Também há números felizes
Os números felizes são definidos pelo seguinte procedimento. Começando com qualquer número inteiro positivo, o número é substituído pela soma dos quadrados dos seus dígitos, e repetir o processo até que o número seja igual a 1 ou até que ele entre num ciclo infinito que não inclui um ou seja a somo dos quadrados dos alugaríamos do quadrado de um número positivo inicial.
Por exemplo para o caso do 7: 72 = 49
42 + 92 = 97
92 + 72 = 130
12 + 32 + 02 = 10
12 + 02 = 1
Neste caso o 7 é um número feliz. Considere que após 10 iterações se não for obtido o 1 o número é infeliz.
input
23
output
feliz

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main(){
int a,total,resto,i,semaforo;
cin>>a;
semaforo=0;
total=0;
for (i=0;i<10;i++){	
	if (a==1){
		semaforo=1;
		break;
	}
do{
	resto=a%10;
	a=a/10;
	total=total+resto*resto;
	
}while (a!=0);
cout<<total<<"\n";
a=total;
total=0;
}
if(semaforo==0){
	cout<<"infeliz";
}else{
	cout<<"feliz";
}
system("pause");
return 0;
}

 

Poesia e outras coisas que tais

Só qualidades
É sabido que o vosso Professor é um excelente cantor. Nem todos sabem é que além disso é um excelente poeta também. Só tem um pequeno problema que é usar palavras demais nos poemas.
Para isso necessita de alguém que lhe corrija os poemas e consultou um excelente poupador de palavras que se chama Barjona.
O que o Barjona faz é ler os poemas e colocar no texto os sinais [ ], quer isto dizer que o que está entre estes dois sinais é para sair porque está a mais.
O seu programa vai ler uma frase do poema e devolvê-lo já com as correções do Barjona feitas.
input
Deixa de[ sonhar e] pensar no tal[Fernando Silva] Vilela.
output
Deixa de pensar no tal Vilela.

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main(){
string a,b;
int i,semaforo,tam;
b="";
semaforo=0;
getline(cin,a);
tam=a.length();
for(i=0;i<tam;i++){
	if (a[i]=='['){
		semaforo=1;
		}
		if (a[i]==']'){
				semaforo=0;
			i++;
		}
		if (semaforo==0){
			cout<<a[i];
		}
}
cout<<b;
system("pause");
	return 0;
}

 

A maior palavra

A minha palavra é a maior
O seu programa deve ler uma frase e devolver o número de letras da maior palavra.<br>
input
A escola é boa.
output
6

Eis uma proposta de solução:

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;

int main(){
	string a;
	int tam,i,conta,maior;
	maior=0;
	getline(cin,a);
	tam=a.length();
	conta=0;
	for (i=0;i<tam;i++){
		if(a[i]!=' '){
			conta++;
		}else{
			if (conta>maior){
				maior=conta;				
			}
			conta=0;
	}
	}
	if (conta>maior){
		maior=conta;
	}
	cout<<maior;
	system("pause");
	return 0;
}

 

 

 

 

Números persistentes

A persistência de um número
A persistência de um número é um conceito engraçado. Partimos de um número e vamos multiplicando todos os seus dígitos até que o resultado seja um número menor que 10. Por exemplo:
715-35-15-5
O número de produtos que temos que realizar chama-se persistência de um número. Assim, 715 tem persistência 3. O seu programa não deve dizer qual a persistência do número mas sim qual o número final (menor que 10 em que termina).
input
88
output
8

Eis uma proposta de solução:

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	int numero,total,resto;
	cin>>numero;
	total=1;
	do{		
				resto=numero%10;
				total=total*resto;
				numero=numero/10;		
		if(numero==0){
			numero=total;
			if (total<10){
				break;
			}
			total=1;
		}
	}while(numero>0);
	cout<<total;
	system ("pause");
	return 0;
}

 

 

 

Nome de Medicamento

Sabemos que os medicamentos têm nomes estranhos. Vamos imaginar que qualquer palavra que termine em broncodiol é um medicamento.
O seu programa deve devolver 1 ou 0, consoante determinada palavra represente, ou não, um medicamento.
input
anexplatiosnsbroncodiol
output
1

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main(){
	int onde,tamanho;
string palavra;
cin>>palavra;
tamanho=palavra.length();
onde=palavra.find("broncodiol");
if (onde==tamanho-10){
	cout<<1;
}else{
	cout<<0;
}
system("pause");
return 0;
}

 

Crivo de Erastótenes

O crivo de Erastótenes é um algoritmo que serve para identificar números primos. Este algoritmo pode ser consultado aqui.

Eis uma proposta de solução:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main(){
int numeros[30],j,i;
for(i=1;i<25;i++){
	numeros[i]=i;
}
for(i=2;i<25;i++){
	for(j=i;j<25;j++){
		if(i*j<25){
		numeros[i*j]=0;
		}
	}
}
for(i=1;i<25;i++){
	if(numeros[i]!=0){
		cout<<numeros[i]<<" ";
	}
}
system("pause");
return 0;
}

 

 

Damos Camisas

Suponha que tem uma série de T-shirts para distribuir por voluntários. As medidas possíveis são S M L XL. O número de camisas a distribuir é sempre múltiplo de 4 e contempla todas as medidas, ou seja se distribuir 8 Tshirt distribui 2 tamanho S, 2 tamanho M, 2 tamanho L e 2 tamanho XL.
O seu programa deve ler o número de camisas o número de voluntários e devolver 1 ou 0 consoante seja ou não possível fazer a distribuição.
Primeiro aparece o número de camisas e depois o dos voluntários, seguidamente os tamanhos que os voluntários vestem.
input
12 3
S S S
output
1

Eis uma proposta de solução:

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main()
{
	string c;
	int a,b,i,c1,c2,c3,c4;
	c1=0;
	c2=0;
	c3=0;
	c4=0;
	cin>>a;
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>c;
		if(c=="S"){
			c1++;
		}
		if(c=="M"){
			c2++;
		}
		if(c=="L"){
			c3++;
		}
		if(c=="XL"){
			c4++;
		}
	}
	if(c1<=a/4 && c2<=a/4 && c3<=a/4 && c4<=a/4){
		cout<<"1";
	}
	if(c1>a/4 || c2>a/4 || c3>a/4 || c4>a/4){
		cout<<"0";
	}
	system("pause");
	return 0;
}

 

 

Conjetura de Collatz ou 3n+1

Conjetura de Collatz ou 3n+1
A conjetura de Collatz afirma que qualquer número natural, exposto a esta conjetura, dará sempre resultado 1.
A conjetura é a seguinte: Se o número for par divide-se por 2, se o número for ímpar toma o valor 3n+1.
Por exemplo para o número 10 temos o seguinte resultado:
10 5 16 8 4 2 1
O seu programa deve devolver o número de operações que são necessárias para obter o número 1. Por exemplo no programa anterior seriam 6.
input
5
output
5

Eis uma proposta de solução:

#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
	int a,guardar,conta;
	cin>>a;
	guardar=a;
	conta=0;
	do{
		if(guardar%2==0){
			guardar=guardar/2;
			conta=conta+1;
		}else{
			guardar=(3*guardar)+1;
			conta=conta+1;
		}
	}while(guardar!=1);
	cout<<conta;
	//system("pause");
	return 0;
}

 

 

Produto mais caro

Saber poupar
O seu programa deve ler um conjunto de produtos e respetivos preços e devolver o produto mais caro.
A lista termina com 99.
input
1 34
4 33
2 55
5 22
99
output
2

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main()
{
	int a,b,guardar,i,guradar;
	guradar=0;
	guardar=0;
	i=0;
	do{
		i=i+1;
		cin>>a;
		if(a!=99){
		cin>>b;
			if(b>guardar){
				guardar=b;
				guradar=a;
			}
		}
	}while(a!=99);
	cout<<guradar;
	//system("pause");
	return 0;
}

 

 

Apenas as últimas

Apenas as do fim
O seu programa deve ler uma palavra e devolver o número de letras lido a contar do fim.
input
3
casamento
output
nto

Eis uma proposta de solução:

#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int main()
{
	int a,c,i;
	string b,guardar;
	cin>>c;
	cin>>b;
	a=b.length();
	for(i=a-c;i<a;i++){
		cout<<b[i];
	}
	//system("pause");
	return 0;
}

 

Jogo do SuperMario

O SuperMário tem uma série de barreiras que deve saltar para cumprir a sua missão

O seu programa deve devolver o número de saltos que o SuperMario dá em que tem que subir e o número de saltos que dá em que tem que descer.

O número da primeira linha refere o número total de barreiras que o SuperMário tem que saltar.
input
8
1 4 2 2 3 5 3 4 
output
4 2

Eis um proposta de solução:

#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
	int a,b[1000],acumula,acumulaa,i;
	cin>>a;
	acumula=0;
	acumulaa=0;
	for(i=1;i<=a;i++){
		cin>>b[i];
		if(i!=1){
		if(b[i]>b[i-1]){
			acumula=acumula+1;
		}
		if(b[i]<b[i-1]){
			acumulaa=acumulaa+1;
		}
		}
	}
	cout<<acumula;
	cout<<" "<<acumulaa;
	//system("pause");
	return 0;
}

 

 

Flavius Josephus  cercado pelos Romanos

Segundo a história Flavius Josephus foi juntamente com 40 companheiros cercado pelos romanos. Em vez de se renderem entendeu Flavius Josephus  que deveriam matar-se. Para isso criou um jogo que de x em x pessoas matava uma delas. Por exemplo se fossem 5 pessoas, se iniciássemos a contagem no soldado 1 e saltássemos de 2 em 2 o resultado seria o seguinte: morreria o 2,4,1,5 e viveria o 3.

Moral da história Flavius Josephus foi o único sobrevivente, entregou-se aos romanos e veio a ser seu conselheiro de guerra. Por isso há quem diga que Flavius Josephus  seria um bom matemático e por isso se salvou. Aqui fica uma proposta de código:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;

void enche(int );
int soldados[30];

int main(){
	int quantos,salto,i, inicio,conta,morreram;	
	cin>>quantos;
	cin>>salto;
	enche(quantos);
	inicio=1;
	conta=0;
	morreram=0;
	do{
		
		for (i=1;i<=quantos;i++){
			if (soldados[i]==1){
				conta++;
				
					if(conta%salto==0){
						soldados[i]=0;	
						morreram++;
					}
			}

		}
		i=1;

	}while(morreram<quantos-1);

	for (i=1;i<=quantos;i++){
		if(soldados[i]!=0){
			cout<<"Ganhou o soldado "<<i;
		}
	}

	system("pause");
	return 0;
}

void enche(int quantos){
	int i;
	for(i=1;i<=quantos;i++){
		soldados[i]=1;
	}
}

 

 

 

Palavra com as letras todas diferentes

Leia uma palavra e devolva 1 ou 0 consoante as letras sejam todas diferentes.

input
lixo
output
1

Eis uma proposta de código:

#include "iostream"
#include "string"
using namespace std;

int main()
{
	int b,i,semaforo,j;
	semaforo=0;
	string a;
	cin>>a;
	b=a.length();
	for(i=0;i<b;i++){
		for(j=i+1;j<b;j++){
			if(a[i]==a[j]){
				semaforo=1;
			}
		}
	}
	if(semaforo==1){
		cout<<"1";
	}else{
		cout<<"0";
	}
	return 0;
}

 

Letra mais pequena

O seu programa deve ler uma palavra e devolver a letra que, pertencendo à palavra, primeiro aparece no alfabeto.

input
casa
output
a

Eis uma proposta de código

#include "iostream"
#include "string"
using namespace std;

int main()
{
	int b,i,guardar;
	guardar=200;
	string a;
	cin>>a;
	b=a.length();
	for(i=0;i<b;i++){
		if(int(a[i])<guardar){
			guardar=int(a[i]);
		}
	}
	cout<<char(guardar);
	return 0;
}

 

Zeros à esquerda de nada valem

Zeros que nada valem!
Faça um programa que leia um número binário e devolva quantos 0 o mesmo tem à esquerda (isto é antes de aparecer qualquer 1).
input
001100
output
2

Eis uma proposta de solução:

//#include "stdafx.h"
#include <iostream>
#include "string"
using namespace std;

int main()
{
	int contador,i,tamanho;
	string num;

	contador=0;
	cin>>num;
	tamanho=num.length();
	for(i=0;i<tamanho;i++){
		if(num[i]-'0'==0){
			contador=contador+1;
		}
		if(num[i]-'0'==1){
			break;
		}
	}
	cout<<contador;
	system("pause");
	return 0;
}

 

 

Problema de batatas

Voltemos às batatas.
Considere que tenho um tipo de batatas que às 2ª, 4ª, 6ª e domingo duplica e às 3ª,5ª e sábado diminui de 3. 
O meu tempo começa numa segunda feira e o seu programa vai ler o número de batatas que tenho e quantos dias dura a minha experiência.
Deve devolver o número de batatas final (não esqueça que nunca pode ter batatas negativas, como é natural).
input
3
4
output
3

Eis ums proposta de solução:

#include "iostream"
using namespace std;

int main()
{
	int num,dias,i,contador;
	cin>>num;
	cin>>dias;
	contador=num;
	for(i=1;i<=dias;i++){
		if(i%2==1){
			contador=contador*2;
		}
		if(i%2==0){
			contador=contador-3;
		}
	}
	
	if(contador<0){
		cout<<0;
	}else{
	cout<<contador;
	}
	system("pause");
	return 0;
}

 

 

Palavras com letras todas diferentes

Faça um programa que leia uma palavra e devolva 1 ou 0 consoante as suas letras são, ou não, todas diferentes.

input
casa
output
0

Uma possibilidade de solução passa por ordenar todas as letras da palavra, guardando-as num array de inteiros, por exemplo e correr todo o array para verificar se são, ou não todas diferentes. Eis uma proposta de solução:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
void troca();
int main(){
int i,j,numero[20],ajuda,semaforo;
string palavra;
//----------
cin>>palavra;
for (i=0;i<palavra.length();i++){
	numero[i]=int(palavra[i]);
}
for (j=1;j<palavra.length()-1;j++){
		for (i=0;i<palavra.length()-1;i++){
            if(numero[i]>numero[i+1]){
                ajuda=numero[i];
                numero[i]=numero[i+1];
                numero[i+1]=ajuda;
            }
    }
    }
//------fim da ordenação
semaforo=0;
for(i=0;i<palavra.length();i++){
	if((numero[i])==(numero[i+1])){
			semaforo=1;
			break;
	}
}
cout<<semaforo;
system("pause");
return 0;
}

Ordenar palavra por letras

O seu programa deve ler uma palavra e devolvê-a com as letras ordenadas.

input
casa
output
aacs

Eis uma proposta de código:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main(){
int i,j,numero[20],ajuda;
string palavra;
//----------
cin>>palavra;
for (i=0;i<palavra.length();i++){
	numero[i]=int(palavra[i]);
}
for (j=1;j<palavra.length()-1;j++){
		for (i=0;i<palavra.length()-1;i++){
            if(numero[i]>numero[i+1]){
                ajuda=numero[i];
                numero[i]=numero[i+1];
                numero[i+1]=ajuda;
            }
    }
    }
    cout<<"Eis a palavra ordenada.\n";
	for (i=0;i<palavra.length();i++){
        cout<<char(numero[i]);
    }  
system("pause");
return 0;
}

 

Ordenar números

Com o algoritmo bubblesort. Eis uma proposta de código.

#include "stdafx.h"
#include "iostream"
using namespace std;
int main(){
	int i,j,numero[20],ajuda;
	for (i=0;i<4;i++){
		cin>>numero[i];
	}
	for (j=1;j<4;j++){
		for (i=0;i<3;i++){
			if(numero[i]>numero[i+1]){
				ajuda=numero[i];
				numero[i]=numero[i+1];
				numero[i+1]=ajuda;
			}
	}
	}
	cout<<"Eis os números ordenados.\n";
	for (i=0;i<4;i++){
		cout<<numero[i]<<"\n";
	}		
	system("pause");
	return 0;
}

 

Números Primos de Mersenne

No século XVII Father Martin Mersenne conjeturou que os números do tipo 2p-1 são primos, desde que p seja primo. 
O seu programa vai ler um número p e devolver o primo devolvido pelo método de Mersenne.
input
7
output
127

Proposta de solução:

#include "iostream"
using namespace std;

int potencia(int,int);
int main()
{
	int total, p;
	total=1;
	cin>>p;
	total=potencia(2,p);
	cout<<total-1;
	system ("pause");
	return 0;

}
    int potencia(int a,int b){
    int total,i;
    total=1;
    for(i=1;i<=b;i++){
	total=total*a;
}
return total;

}

 

 

Problema de Trocos

Um programa que leia um valor monetário, com 2 casas decimais, e devolva o seu troco em moedas.

Eis uma proposta de solução:

#include "stdafx.h"
#include "iostream"
using namespace std;

int potencia(int,int);

int _tmain(int argc, _TCHAR* argv[]){
float dinheiro;
int dinheiro1,dinheiro2;
cin>>dinheiro;
dinheiro1=dinheiro*100;
cout<<dinheiro1<<"\n";

cout<<dinheiro1/200<<"\n";
if(dinheiro1/200>0){
	dinheiro1=dinheiro1%200;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/100<<"\n";

if(dinheiro1/100>0){
	dinheiro1=dinheiro1%100;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/50<<"\n";

if(dinheiro1/50>0){
	dinheiro1=dinheiro1%50;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/20<<"\n";
if(dinheiro1/20>0){
	dinheiro1=dinheiro1%20;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/10<<"\n";
if(dinheiro1/10>0){
	dinheiro1=dinheiro1%10;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/5<<"\n";
if(dinheiro1/5>0){
	dinheiro1=dinheiro1%5;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/2<<"\n";
if(dinheiro1/2>0){
	dinheiro1=dinheiro1%2;
}else{
	dinheiro1=dinheiro1;
}
cout<<dinheiro1/1<<"\n";
if(dinheiro1/1>0){
	dinheiro1=dinheiro1%1;
}else{
	dinheiro1=dinheiro1;
}
	system("pause");
	return 0;
}

 

Converter um decimal para binário

Como sabemos para fazer a conversão de um decimal para inteiro, devemos dividi-lo sucessivamente por 2 até que o quociente seja 1. Depois devemos devolver o quociente e todos os restos da divisão entretanto realizadas. Este processo obriga à utilização de um array de inteiros. Eis uma proposta de código.

#include "stdafx.h"
#include "iostream"
#include <math.h> 
using namespace std;
int main(){
	int decimal,i,guarda[20];
	for (i=0;i<20;i++){
		guarda[i]=2;
	}
	cin>>decimal;
	
	for (i=0;i<10;i++){
		guarda[i]=decimal%2;
		decimal=decimal/2;
		if(decimal==1){
			guarda[i+1]=decimal;
			break;
		}
	}
		for (i=19;i>=0;i--){
			if (guarda[i]!=2){
				cout<<guarda[i];
			}
	}
	system("pause");
	return 0;
}

 Repare que necessitamos de limpar o array e para isso escolhemos o número 2. Em verdade poderíamos ter escolhido qualquer número que não o 0 e 1. 

Problema de horas.


Qual o meu ângulo?

Considere por simplicidade que num relógio o ponteiro das horas se encontra sempre sobre as 12:00. Qual o ângulo que o ponteiro dos minutos faz, em relação ao das horas, quando está sobre um determinado número de minutos?
input
15
output
90

Deve pensar que o circulo das tem 360º e no caso do relógio está dividido em 60 minutos. Assim como pode concluir a cada minuto corresponde um ângulo de 6º, sendo a resolução deste problema mais fácil do que parece.

Eis uma proposta de solução:

#include "iostream"
using namespace std;
int main()
{
	int minutos;
	cin>>minutos;
	cout<<minutos*6;
	system("pause");
	return 0;
}

 

 

Faz estrelinhas.

O seu programa deve ler o número de linhas e o número de colunas e devolver o número de estrelas correspondente.
input
3
4
output
****
****
****

Proposta de resolução:

#include "iostream"
using namespace std;
int main()
{
	int linhas, colunas, i, total;
	cin>>linhas;
	cin>>colunas;
	total=linhas*colunas;
	for(i=1;i<=total;i++){
		cout<<"*";
		if(i%colunas==0){
			cout<<"\n";
		}
	}
	return 0;
}

 

 

Lingua dos p.

O seu programa deve aceitar uma palavra e devolver a palavra escrita na lingua dos p.
A lingua dos p caracteriza-se por em cada vogal escrever p e repetir a vogal. Na primeira linha temos o número de letras que deve ler.
input
4 casa
output
capasapa

Proposta de resolução:

#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{	int a,i;
	char b[100];
	cin>>a>>b;
	for(i=0;i<a;i++){
		cout<<b[i];
		if (b[i]=='a' || b[i]=='e' || b[i]=='i' || b[i]=='o' || b[i]=='u'){
			cout<<"p"<<b[i];
		}
	}
	system("pause");
	return 0;
}

 

Escrever palavra ao contrário.

O seu programa deve ler uma palavra e devolvê-la escrita do fim para o princípio. O primeiro digito é o número de letras da palavra.

input
5
teste
output
etset

Eis uma proposta de solução:

#include "stdafx.h"
#include "iostream"
using namespace std;


int main()
{
	int a,i;
	char palavra [10];
	cin>>a;
	cin>>palavra;
	for (i=a-1;i>=0;i--){
		cout<<palavra[i];
	}
	//system("pause");
	return 0;
}

 

Soma dos quadrados e quadrado da soma.

Considere os números até 3.A soma dos seus quadrados é:
12+22+32=14
Por outro lado o quadrado da soma é:
(1+2+3)2=36 
Então a diferença é 36-14=22
O seu programa deve ler um número e calcular a diferença entre o quadrado da soma e a soma dos quadrados.
input
3
output
22

Eis uma proposta de resolução:

#include "iostream"
using namespace std;
int main()
{
	int i,a,acumula,acumula_a;
	acumula_a=0;
	acumula=0;
	cin>>a;
	for(i=1;i<=a;i++){
		acumula=acumula+(i*i);
		acumula_a=acumula_a+i;
	}
	cout<<(acumula_a*acumula_a)-acumula;
	return 0;
}

 

 

Palavra fixe ou nfixe.

Uma palavra é fixe se os seus extremos (primeira e última letra) forem números. Faça um programa que leia uma palavra (o primeiro número corresponde ao número de caracteres) e devolva fixe ou nfixe consoante o caso.

input
5
5asc6
output
fixe

Eis uma proposta de resolução:

#include "iostream"
using namespace std;
int main(){
int vezes;
char palavra[10];
cin>>vezes;
cin>> palavra;
if(palavra[0]>=48 && palavra[0]<=57){
	if(palavra[vezes-1]>=48 && palavra[vezes-1]<=57){
		cout<< "fixe";
	}else{
	cout<< "nfixe";
	}
}else{
		cout<< "nfixe";
}
	return 0;
}

 

Quantas são as letras minusculas.

O seu programa deve ler uma palavra com letras maiúsculas e minúsculas e devolver quantas são as letras minúsculas. A primeira linha do input dá-lhe o número de carateres que a palavra tem.

input
5
ASDgD
output
1

#include "iostream"
using namespace std;
int main(){
	int num,i,contador_mi;
	char letra;
	contador_mi=0;
	cin>>num;
	for (i=1;i<=num;i++){
		cin>>letra;
		if (int(letra)>=97){
			contador_mi=contador_mi+1;
		}
	}
	cout<<contador_mi;
	return 0;
}

 

Sempre a descer ou a subir.

O seu programa deve ler um conjunto de letras maiúsculas e devolver se as mesmas estão escritas na ordem crescente ou decrescente. O primeiro número do input é o número de letras que o seu programa deve ler.

input
5
G
H
I
J
K

output
crescente

Repare que neste caso não necessita de ler as letras todas, basta ler as duas primeiras para adivinhar a sequência. Claro que isto se faz comparando o código ASCII das duas letras. Eis uma proposta de resolução:

#include "iostream"
using namespace std;
int main(){
	int vezes;
char letra1,letra2;
cin>> vezes;
cin>>letra1;
cin>>letra2;
cin>> letra3;
       if(int(letra1)> int(letra2)){
	       cout<< "decrescente";
}
	if(int(letra1)<int(letra2)){
		cout<<"crescente";

	}	
	return 0;
}

 

 

Palavra começa, ou não, por maiúscula.

O seu programa deve ler uma palavra e devolver se a mesma começa, ou não, por maiúscula.

#include "iostream"
using namespace std;
int main()
{
	char palavra;
	cin>>palavra;
	if(int(palavra)>=65 && int(palavra)<97){
		cout<<"s";
	}else{
		cout<<"n";
	}
	system("pause");
	return 0;
}

 

Números e letras misturados.

O seu programa deve ler uma palavra que é composta por números e letras e devolver quantos números estão presentes na palavra. No input a primeira linha contém o número de letras das palavras.

input
6
cas12a
output
2

Eis uma proposta de resolução:

#include <iostream>
using namespace std;
int main()
{
	int carater,i,acumula;
	char palavra[10];	
	acumula=0;
	cin>>carater;
	cin>>palavra;
	for(i=0;i<=carater;i++){
		if(int(palavra[i])>=40 && int(palavra[i])<=50){
			acumula=acumula+1;
		}
	}	
	cout<<acumula;	
	system("pause");
	return 0;
}

 

A palavra amor.

A palavra amor está em jogo novamente 
O seu programa deve ler um conjunto de letras, no máximo 30, e detetar se com estas se pode escrever a palavra amor (isto é terá que existir pelo menos um a, um m, um o e um r)
O seu programa deve devolver s ou n consoante o caso.
O primeiro número corresponde ao núemero de letras que deverá ler.
input
12
a
f
d
s
m
t
o
d
r
s
a
o
output
s

using namespace std;
int main()
{	char letra;
	int i,letras;
	int contadorA;
	int contadorM;
	int contadorO;
	int contadorR;
	contadorA=0;
	contadorM=0;
	contadorO=0;
	contadorR=0;
cin>>letras;
for (i=1;i<=letras;i++){
	cin>>letra; 
if(letra=='a'){
	contadorA=contadorA+1;
}
if(letra=='m'){
	contadorM=contadorM+1;
}
if(letra=='o'){
	contadorO=contadorO+1;
}
if(letra=='r'){
	contadorR=contadorR+1;
}
}
if(contadorA>0 && contadorM>0 && contadorO>0 && contadorR>0){
	cout<<"s";
}else{
	cout<<"n";
}
system("pause");
	return 0;
}

 

 

Olho o Robô.

Vamos orientar um robô? 
O nosso robô só pode andar para a esquerda E ou para a direita D.
O seu programa deve as instruções dadas ao robô e concluir no final se o robô, em relação à posição inicial, se encontra à esquerda E, direita D ou no mesmo sitio0.
A primeira linha dá-lhe o número de instruções que o seu programa deve ler.
input
3
E
E
D
output
E

#include "iostream"
using namespace std;
int main()
{ 
	int a, i, esq, dir;
char direcao;
esq=0;
dir=0;
cin>>a;
for(i=1;i<=a;i++){
	
	cin>>direcao;

	if(direcao=='D'){ 
		dir=dir+1;
	}

	if(direcao=='E'){
		esq=esq+1; 
	}
} 
if(esq>dir){
	cout<<"E"; }
if(dir>esq){ 
	cout<<"D"; 
}
if(dir==esq){ 
	cout<<"0";
} 
return 0;
}

 

 

Verifica se um determinado número, até 100, é um quadrado perfeito.

Um quadrado perfeito é um número que é o quadrado de outro. Por exemplo 16 é um quadrado perfeito porque é o quadrado de 4, assim como 25 é um quadrado perfeito porque é o quadrado de 5.

#include <iostream>
using namespace std;

int main()
{
	int a,semaforo,i;
	cin>>a;
	semaforo=0;
	for(i=1;i<=100;i++){
		if(a==i*i){
			cout<<"s";
			semaforo=1;
			break;
		}
	}
	if(semaforo==0){
		cout<<"n";
	}
	return 0;
}

 

Será que um determinado número pode ser escrito na forma 2n+1 ?

#include "iostream"
using namespace std;

int main(){
int a,f,i,sem;
cin>>a;
for(i=1;i<=100;i++){
	sem=0;
	f=2*i+1;
	
		if (a==f){
			sem=1;
			cout<<"s";
			break;
		}
}
if (sem==0){
	cout<<"n";
}

		return 0;
}

 

Mostra se um número é par ou ímpar

#include "stdafx.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int numero;
	cin>>numero;
	if(numero%2==0){
		cout<<"par";
	}else{	
		cout<<"ímpar";
	}
	
	system ("pause");
	return 0;
}

 

Lê 5 números e mostra o maior de entre eles

#include "stdafx.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int numero,maior,i;
	maior=0;
	for (i=1;i<=5;i++){
		cin>>numero;
		if (numero>maior){
			maior=numero;
		}
	}
cout<<maior;
	system("pause");
	return 0;
}

 

Faça um programa que leia um conjunto de 5 letras. Cada letra a vale 5 pontos, cada letra e desconta 2 pontos.

input
s
d
e
a
f
output
3

#include "iostream"
using namespace std;
int main ()
{
	int i,acumulador;
char letra;
acumulador=0;
for(i=1;i<=5;i++){
	cin>>letra;
			if(letra=='a'){
				acumulador=acumulador+5;
			}			
			if(letra=='e'){
				acumulador=acumulador-2;
			}
}
cout<<acumulador;
	return 0;
}

 

 

Free visitor tracking, live stats, counter, conversions for Joomla, Wordpress, Drupal, Magento and Prestashop