Departamento de Ciência da
Computação - IME - USP
#include <stdio.h>
int main()
{
int a, b, c, d, nusp;
printf("Digite o seu no. USP: ");
scanf("%d", &nusp); /* nesta linha use o seu numero USP */
printf("nusp = %d\n", nusp);
a = nusp % 10;
b = (9 - a)*2 + 1;
if (a < 5)
c = b/2;
else
c = 9 - b/2;
printf("a=%d b=%d c=%d\n", a, b, c);
d = 14 - c;
while (c > 0 || c + d > 1) {
if (c == 1 && d == 2) {
a = c;
b = 0;
}
else {
a = c;
b = d;
}
d = a/2;
c = b/2;
printf("a=%d b=%d c=%d d=%d\n", a, b, c, d);
}
return 0;
}
A resposta 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 seu no. USP: 1234560 nusp = 1234560 a=0 b=19 c=9 a=9 b=5 c=2 d=4 a=2 b=4 c=2 d=1 a=2 b=1 c=0 d=1
(1) nusp%10 == 1. Veja um exemplo abaixo.
Digite o seu no. USP: 1234561 nusp = 1234561 a=1 b=17 c=8 a=8 b=6 c=3 d=4 a=3 b=4 c=2 d=1 a=2 b=1 c=0 d=1
(2) nusp%10 == 2. Veja um exemplo abaixo.
Digite o seu no. USP: 1234562 nusp = 1234562 a=2 b=15 c=7 a=7 b=7 c=3 d=3 a=3 b=3 c=1 d=1 a=1 b=1 c=0 d=0
(3) nusp%10 == 3. Veja um exemplo abaixo.
Digite o seu no. USP: 1234563 nusp = 1234563 a=3 b=13 c=6 a=6 b=8 c=4 d=3 a=4 b=3 c=1 d=2 a=1 b=0 c=0 d=0
(4) nusp%10 == 4. Veja um exemplo abaixo.
Digite o seu no. USP: 1234564 nusp = 1234564 a=4 b=11 c=5 a=5 b=9 c=4 d=2 a=4 b=2 c=1 d=2 a=1 b=0 c=0 d=0
(5) nusp%10 == 5. Veja um exemplo abaixo.
Digite o seu no. USP: 1234565 nusp = 1234565 a=5 b=9 c=5 a=5 b=9 c=4 d=2 a=4 b=2 c=1 d=2 a=1 b=0 c=0 d=0
(6) nusp%10 == 6. Veja um exemplo abaixo.
Digite o seu no. USP: 1234566 nusp = 1234566 a=6 b=7 c=6 a=6 b=8 c=4 d=3 a=4 b=3 c=1 d=2 a=1 b=0 c=0 d=0
(7) nusp%10 == 7. Veja um exemplo abaixo.
Digite o seu no. USP: 1234567 nusp = 1234567 a=7 b=5 c=7 a=7 b=7 c=3 d=3 a=3 b=3 c=1 d=1 a=1 b=1 c=0 d=0
(8) nusp%10 == 8. Veja um exemplo abaixo.
Digite o seu no. USP: 12345678 nusp = 12345678 a=8 b=3 c=8 a=8 b=6 c=3 d=4 a=3 b=4 c=2 d=1 a=2 b=1 c=0 d=1
(9) nusp%10 == 9. Veja um exemplo abaixo.
Digite o seu no. USP: 1234569 nusp = 1234569 a=9 b=1 c=9 a=9 b=5 c=2 d=4 a=2 b=4 c=2 d=1 a=2 b=1 c=0 d=1
Escreva um programa em C que dados um número inteiro n, n > 0, e uma seqüência de n números inteiros, determina quantos segmentos de números iguais consecutivos compõem essa seqüência.
Exemplos:
7 2 2 3 -4 -4 -4 -4 3 3a resposta é 5;
1 2 1 2 1a resposta é 5;
/*
* Solucao 1: Solucao curta e simples.
*/
#include <stdio.h>
int main()
{
int n, /* numero de elementos da sequencia */
i, /* contador de numeros lidos da sequencia */
atual, /* numero da sequencia */
anterior, /* numero anterior da sequencia */
seg_iguais; /* quantidade de segmentos de numeros iguais a */
printf("Digite o numero de elementos da sequencia: ");
scanf("%d",&n);
printf("Digite uma sequencia com %d numeros inteiros: ", n);
/* inicializacoes */
scanf("%d", &anterior); /* anterior comeca com o primeiro da sequencia */
seg_iguais = 1; /* inicialmente temos um segmento */
for (i = 1; i < n; i++)
{
/* examine próximo número da sequencia */
scanf("%d", &atual);
/* comecou um novo segmento de numeros iguais? */
if (atual != anterior)
{
seg_iguais = seg_iguais + 1;
anterior = atual;
}
}
printf("Quantidade de segmentos de numeros iguais da sequencia = %d\n", seg_iguais);
return 0;
}
/*
* Solucao 2: identica a solucao 1 com 'while' no lugar de 'for'
*
*/
#include <stdio.h>
int main()
{
int n, /* numero de elementos da sequencia */
i, /* contador de numeros lidos da sequencia */
atual, /* numero da sequencia */
anterior, /* numero anterior da sequencia */
seg_iguais; /* quantidade de segmentos de numeros iguais a */
printf("Digite o numero de elementos da sequencia: ");
scanf("%d",&n);
printf("Digite uma sequencia com %d numeros inteiros: ", n);
/* inicializacoes */
scanf("%d", &anterior); /* anterior comeca com o primeiro da sequencia */
seg_iguais = 1; /* inicialmente temos um segmento */
i = 1;
while (i < n)
{
/* examine próximo número da sequencia */
scanf("%d", &atual);
i = i + 1;
/* comecou um novo segmento de numeros iguais? */
if (atual != anterior)
{
seg_iguais = seg_iguais + 1;
anterior = atual;
}
}
printf("Quantidade de segmentos de numeros iguais da sequencia = %d\n", seg_iguais);
return 0;
}
/*
* Solucao 3: colocaremos aqui qualquer solução que virmos e que
* seja essencialmente diferente das anteriores.
*/
Dizemos que um número n pode ser quebrado nos números n1 e n2 se n pode ser escrito da forma n1n2, isto é, concatenado-se n1 com n2.
Escreva um programa em C que, dados três inteiros positivos n, n1 e n2, verifica se n pode ser quebrado em n1 e n2.
Suponha que o dígito 0 não aparece em nenhum dos números dados.
Exemplos:
/*
* Solucao 1: Solucao curta e simples.
*
*/
#include <stdio.h>
int main()
{
int n;
int n1;
int n2;
int pot10;
printf("Digite n, n1 e n2: ");
scanf("%d %d %d", &n, &n1, &n2);
/* determine a menor potencia de 10 maior que n2 */
pot10 = 1;
while (pot10 <= n2)
{
pot10 = pot10 * 10;
}
/* verifique se n eh quebrado */
if (n == n1*pot10 + n2)
{
printf("%d eh quebrado em %d e %d (%d==%d%d).\n", n, n1, n2, n, n1, n2);
}
else
{
printf("%d nao eh quebrado em %d e %d (%d!=%d%d).\n", n, n1, n2, n, n1, n2);
}
return 0;
}
/*
* Solucao 2: solucao anterior sem as chaves superfluas.
*
*/
#include <stdio.h>
int main()
{
int n;
int n1;
int n2;
int pot10;
printf("Digite n, n1 e n2: ");
scanf("%d %d %d", &n, &n1, &n2);
/* determine a menor potencia de 10 maior que n2 */
pot10 = 1;
while (pot10 <= n2)
pot10 = pot10 * 10;
/* verifique se n eh quebrado */
if (n == n1*pot10 + n2)
printf("%d eh quebrado em %d e %d (%d==%d%d).\n", n, n1, n2, n, n1, n2);
else
printf("%d nao eh quebrado em %d e %d (%d!=%d%d).\n", n, n1, n2, n, n1, n2);
return 0;
}
/*
* Solucao 3: solucao anterior com 'for' no lugar de 'while'
*
*/
#include <stdio.h>
int main()
{
int n;
int n1;
int n2;
int pot10;
printf("Digite n, n1 e n2: ");
scanf("%d %d %d", &n, &n1, &n2);
/* determine a menor potencia de 10 maior que n2 */
for (pot10=1; pot10 <= n2; pot10*=10);
/* verifique se n eh quebrado */
if (n == n1*pot10 + n2)
printf("%d eh quebrado em %d e %d (%d==%d%d).\n", n, n1, n2, n, n1, n2);
else
printf("%d nao eh quebrado em %d e %d (%d!=%d%d).\n", n, n1, n2, n, n1, n2);
return 0;
}
/*
* Solucao 4: colocaremos aqui qualquer solução que virmos e que
* seja essencialmente diferente da anterior.
*/