Departamento de Ciência da
Computação - IME - USP
#include <stdio.h>
int main()
{
int x,y, conta;
printf("Digite o digito final do seu Numero USP: ");
scanf("%d", &x);
printf("Primeiro x= %d \n", x);
y = 2*x + 1;
conta = 1;
printf("Primeiro y= %d \n", y);
while (conta < 6 && (x <= 5 || y > 3))
{
printf("conta= %d\n", conta);
if (x%2 == 0)
{
x = x/2;
y = y-5;
printf("* x= %d\n", x);
}
else
{
x = 3*x + 1;
y = y + 3;
printf("x= %d\n", x);
}
printf("y= %d\n", y);
conta = conta + 1;
}
printf("Ultimo x= %d\n", x);
printf("Ultimo y= %d\n", y);
return 0;
}
A resposta depende do último dígito do seu número USP, ou seja, depende do
resto da divisão do seu número USP por 10.
Teste com o seu no. USP e compare a resposta.
(0) nusp%10 == 0. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 0 Primeiro x= 0 Primeiro y= 1 conta= 1 * x= 0 y= -4 conta= 2 * x= 0 y= -9 conta= 3 * x= 0 y= -14 conta= 4 * x= 0 y= -19 conta= 5 * x= 0 y= -24 Ultimo x= 0 Ultimo y= -24
(1) nusp%10 == 1. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 1 Primeiro x= 1 Primeiro y= 3 conta= 1 x= 4 y= 6 conta= 2 * x= 2 y= 1 conta= 3 * x= 1 y= -4 conta= 4 x= 4 y= -1 conta= 5 * x= 2 y= -6 Ultimo x= 2 Ultimo y= -6
(2) nusp%10 == 2. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 2 Primeiro x= 2 Primeiro y= 5 conta= 1 * x= 1 y= 0 conta= 2 x= 4 y= 3 conta= 3 * x= 2 y= -2 conta= 4 * x= 1 y= -7 conta= 5 x= 4 y= -4 Ultimo x= 4 Ultimo y= -4
(3) nusp%10 == 3. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 3 Primeiro x= 3 Primeiro y= 7 conta= 1 x= 10 y= 10 conta= 2 * x= 5 y= 5 conta= 3 x= 16 y= 8 conta= 4 * x= 8 y= 3 Ultimo x= 8 Ultimo y= 3
(4) nusp%10 == 4. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 4 Primeiro x= 4 Primeiro y= 9 conta= 1 * x= 2 y= 4 conta= 2 * x= 1 y= -1 conta= 3 x= 4 y= 2 conta= 4 * x= 2 y= -3 conta= 5 * x= 1 y= -8 Ultimo x= 1 Ultimo y= -8
(5) nusp%10 == 5. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 5 Primeiro x= 5 Primeiro y= 11 conta= 1 x= 16 y= 14 conta= 2 * x= 8 y= 9 conta= 3 * x= 4 y= 4 conta= 4 * x= 2 y= -1 conta= 5 * x= 1 y= -6 Ultimo x= 1 Ultimo y= -6
(6) nusp%10 == 6. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 6 Primeiro x= 6 Primeiro y= 13 conta= 1 * x= 3 y= 8 conta= 2 x= 10 y= 11 conta= 3 * x= 5 y= 6 conta= 4 x= 16 y= 9 conta= 5 * x= 8 y= 4 Ultimo x= 8 Ultimo y= 4
(7) nusp%10 == 7. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 7 Primeiro x= 7 Primeiro y= 15 conta= 1 x= 22 y= 18 conta= 2 * x= 11 y= 13 conta= 3 x= 34 y= 16 conta= 4 * x= 17 y= 11 conta= 5 x= 52 y= 14 Ultimo x= 52 Ultimo y= 14
(8) nusp%10 == 8. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 8 Primeiro x= 8 Primeiro y= 17 conta= 1 * x= 4 y= 12 conta= 2 * x= 2 y= 7 conta= 3 * x= 1 y= 2 conta= 4 x= 4 y= 5 conta= 5 * x= 2 y= 0 Ultimo x= 2 Ultimo y= 0
(9) nusp%10 == 9. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 9 Primeiro x= 9 Primeiro y= 19 conta= 1 x= 28 y= 22 conta= 2 * x= 14 y= 17 conta= 3 * x= 7 y= 12 conta= 4 x= 22 y= 15 conta= 5 * x= 11 y= 10 Ultimo x= 11 Ultimo y= 10
Os seguintes trechos de programa têm como objetivo verificar se um dado n > 1 é primo. No final, a variável eprimo deve ter valor TRUE se n for primo e FALSE em caso contrário. Indique se o trecho está correto ou incorreto. Para cada trecho indicado como incorreto, dê um valor de n para o qual a resposta é incorreta.
(a) Correto ( ) Incorreto (X)
eprimo = TRUE; Justificativa:
divisor = 2; Quando n é primo,
while (divisor <= n/2 || eprimo == TRUE) { o programa pára com divisor==n+1
if (n % divisor == 0) e eprimo==FALSE. Teste com n==2.
eprimo = FALSE;
divisor++;
}
(b) Correto (X) Incorreto ( )
eprimo = TRUE; Hmmm. Êta código feio. . .
divisor = 2; Alterna indicador dentro
while (divisor <= n/2 && eprimo == TRUE) { do laço. . .
if (n % divisor == 0)
eprimo = FALSE;
else
eprimo = TRUE;
divisor++;
}
(c) Correto (X) Incorreto ( )
eprimo = TRUE;
for (divisor = 2; divisor < n; divisor++)
if (n % divisor == 0)
eprimo = FALSE;
(d) Correto ( ) Incorreto (X)
eprimo = FALSE; Justificativa: Bem errado.
for (divisor = 2; divisor < n; divisor++) Resposta errada se n==2 ou
if (n % divisor != 0) n é composto.
eprimo = TRUE;
(e) Correto ( ) Incorreto (X)
eprimo = TRUE; Justificativa:
for (divisor = 1; divisor <= n/2 && eprimo == TRUE; divisor++) Diz que todo número n>=2
if (n % divisor == 0) não é primo.
eprimo = FALSE; Note que divisor começa
com 1.
Assim, a resposta é
errada sempre
que n é primo
Um número é palíndromo se é igual quando lido de trás para frente ou de frente para trás. Por exemplo, 25952, 55 e 6 são palíndromos e 19192 e 3434 não são palíndromos.
Escreva um programa em C que leia uma sequência de números inteiros
positivos, terminada por zero, e verifica quantos são palíndromos.
Suponha que o dígito 0 não aparece em nenhum número da sequência.
Exemplos de três possíveis execuções do programa:
Digite um numero: 5 Digite um numero: 525 Digite um numero: 5225 Digite um numero: 526 Digite um numero: 59 Digite um numero: 0 3 numeros sao palindromos. |
Digite um numero: 5 Digite um numero: 151 Digite um numero: 212 Digite um numero: 0 3 numeros sao palindromos. |
Digite um numero: 15651 Digite um numero: 0 1 numeros sao palindromos. |
/*
* Solucao 1: Verifica se cada numero da sequencia e' palindromo comparando
* o primeiro e o ultimo digitos e "descascndo" o numero.
*/
#include <stdio.h>
#define SIM 1
#define NAO 0
int main()
{
int numero; /* usado para ler os numeros da sequencia */
int primeiro, ultimo; /* primeiro e ultimo digitos de numero */
int pot10; /* maior potencia de 10 menor ou igual a numero */
int palindromo; /* indica se o numero e' palindromo */
int cont; /* contador de palindromos */
/* 1 leia o primeiro numero da sequencia */
printf("Digite um numero: ");
scanf("%d", &numero);
/* 2 inicialize o contador de palindromos */
cont = 0;
/* 3 leia cada numero da sequencia e decida se eh palindromo */
while (numero != 0)
{
/* 3.1 determine a maior potencia de 10 menor ou igual a num */
pot10 = 1;
while (pot10 <= numero)
{
pot10 = pot10*10;
}
pot10 = pot10/10;
/* 3.2 decida se numero e' palindromo */
palindromo = SIM;
while (numero > 10 && palindromo == SIM)
{
/* compare o primeiro e ultimo digito de numero */
ultimo = numero % 10;
primeiro = numero / pot10;
if (primeiro != ultimo)
{
palindromo = NAO;
}
/* arranque o primeiro e ultimo digito de numero */
numero = numero % pot10;
numero = numero / 10;
/* atualize pot10 */
pot10 = pot10 / 100;
}
/* 3.3 atualize o contador de palincromos */
if (palindromo == SIM)
{
cont = cont + 1;
}
/* 3.4 leia o proximo numero da sequencia */
printf("Digite um numero: ");
scanf("%d", &numero);
}
/* 4 imprima o numero de palindromos */
printf("%d numeros da sequencia sao palindromos.\n\n", cont);
return 0;
}
/*
* Solucao 2: verifica se um numero e' palindromo comparando com o seu reverso
*
*/
#include <stdio.h>
#define SIM 1
#define NAO 0
int main()
{
int numero; /* usado para ler os numeros da sequencia */
int numreverso; /* armazena numero com seus digitos na ordem reversa */
int aux; /* variavel auxiliar usada para "reverter" numero */
int digito; /* usada para "pegar" cada digito de numero */
int cont; /* contador de palindromos */
/* 1 leia o primeiro numero da sequencia */
printf("Digite um numero: ");
scanf("%d", &numero);
/* 2 inicialize o contador de palindromos */
cont = 0;
/* 3 leia cada numero da sequencia e decida se eh palindromo */
while (numero != 0)
{
/* 3.1 armazene o reverso de numero em numreverso */
numreverso = 0;
aux = numero;
while (aux > 0)
{
digito = aux%10; /* ultimo digito de aux */
numreverso = numreverso*10 + digito;
aux = aux/10; /* remove o digito de aux */
}
/* 3.2 verifique se numero e' palindromo */
if (numero == numreverso)
{
cont = cont + 1;
}
/* 3.3 leia o proximo numero da sequencia */
printf("Digite um numero: ");
scanf("%d", &numero);
}
/* 4 imprima o numero de palindromos */
printf("%d numeros da sequencia sao palindromos.\n", cont);
return 0;
}
/*
* Solucao 3: colocaremos aqui qualquer solução que virmos e que
* seja essencialmente diferente das anteriores.
*/
Dizemos que uma sequência de números inteiros é alternante se:
Escreva um programa em C que leia um número inteiro n ≥ 2 e uma seqüência de n números inteiros e imprima uma mensagem indicando se a seqüência é ou não alternante.
/*
* Solucao 1: Solucao arroz-com-feijao.
*/
#include <stdio.h>
#define SIM 1
#define NAO 0
int main()
{
int n; /* numero de elementos da sequencia */
int i; /* contador de numeros lidos da sequencia */
int ultimo; /* ultimo numero lido da sequencia */
int penultimo; /* penultimo numero lido sequencia */
int antepenultimo; /* antepenultimo numero lido sequencia */
int alternante; /* indica se a sequencia e' alternante */
/* 1 leia o numero de elementos da seqyencia */
printf("Digite o numero de elementos da sequencia: ");
scanf("%d",&n);
/* 2 leia o primeiro numero da sequencia */
printf("Digite o 1o. numero da sequencia: ");
scanf("%d", &antepenultimo);
/* 3 leia o segundo numero da sequencia */
printf("Digite o 2o. numero da sequencia: ");
scanf("%d", &penultimo);
/* 4 inicialize a variavel indicadora */
if (penultimo == antepenultimo)
{
alternante = NAO;
}
else
{
alternante = SIM;
}
/* 5 verifique se a sequencia e' alternante */
for (i = 2; i < n; i++)
{
/* 5.1 leia o proximo numero da sequencia */
printf("Digite o %do. numero da sequencia: ", i+1);
scanf("%d", &ultimo);
/* 5.2 verifique se a sequencia _nao_ e alternante */
if ( (antepenultimo <= penultimo && penultimo <= ultimo)
|| (antepenultimo >= penultimo && penultimo >= ultimo) )
{
alternante = NAO;
}
/* 5.3 atualize s variaveis para a proxima iteracao */
antepenultimo = penultimo;
penultimo = ultimo;
}
/* 6 escreva a resposta */
if (alternante == SIM)
{
printf("A sequencia e' alternante.\n\n");
}
else
{
printf("A sequencia nao e' alternate.\n\n");
}
return 0;
}
/*
* Solucao 2: identica a solucao 1
*
*/
#include <stdio.h>
#define SIM 1
#define NAO 0
int main()
{
int n; /* numero de elementos da sequencia */
int i; /* contador de numeros lidos da sequencia */
int ultimo; /* ultimo numero lido da sequencia */
int penultimo; /* penultimo numero lido sequencia */
int antepenultimo; /* antepenultimo numero lido sequencia */
int alternante; /* indica se a sequencia e' alternante */
/* 1 leia o numero de elementos da seqyencia */
printf("Digite o numero de elementos da sequencia: ");
scanf("%d",&n);
/* 2 leia o primeiro numero da sequencia */
printf("Digite o 1o. numero da sequencia: ");
scanf("%d", &antepenultimo);
/* 3 leia o segundo numero da sequencia */
printf("Digite o 2o. numero da sequencia: ");
scanf("%d", &penultimo);
/* 4 inicialize a variavel indicadora */
if (penultimo == antepenultimo)
{
alternante = NAO;
}
else
{
alternante = SIM;
}
/* 5 verifique se a sequencia e' alternante */
for (i = 2; i < n; i++)
{
/* 5.1 leia o proximo numero da sequencia */
printf("Digite o %do. numero da sequencia: ", i+1);
scanf("%d", &ultimo);
/* 5.2 verifique se a sequencia _nao_ e alternante */
if ((penultimo-antepenultimo)*(ultimo-penultimo) >= 0)
{
alternante = NAO;
}
/* 5.3 atualize s variaveis para a proxima iteracao */
antepenultimo = penultimo;
penultimo = ultimo;
}
/* 6 escreva a resposta */
if (alternante == SIM)
{
printf("A sequencia e' alternante.\n\n");
}
else
{
printf("A sequencia nao e' alternate.\n\n");
}
return 0;
}
/*
* Solucao 3: colocaremos aqui qualquer solução que virmos e que
* seja essencialmente diferente das anteriores.
*/