给定 N 个正整数,要求你从中得到下列三种计算结果:
A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K + 1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K + 2 的所有整数的平均值(精确到小数点后 1 位)
输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5
我的想法:按照格式输入,最后输出
答案:输出时先判断,再一个一个输出
第一次
//每次都是无法输出光标一直闪烁
#include<stdio.h>
int main() {
int a1 = 0, a2 = 0, a3 = 0, n = 0, num = 0, i = 0;
int flag1 = 0, flag2 = 0, flag3 = 0;
int max = 0,sum=0,count=0;
double average = 0;
scanf("%d", &n);
for (i = 1;i <= n;i++) {
scanf("%d ", &num);
while (num > 0 && num <= 100) {
sum += num;
//判断a1
if (num % 3 == 1) {
a2++;
}
if (num % 3 == 2) {
count++;
a3 = 1.0 * sum / count;
}
}
}
输出太繁琐,可以单个判断,单个输出
if (flag1 == 0) {
if (flag2 == 0) {
if (flag3 == 0) {
printf("NONE NONE NONE");
}
else {
printf("NONE NONE %d",a3);
}
}
else {
if (flag3 == 0) {
printf("NONE %d NONE",a2);
}
else {
printf("NONE %d %d", a2,a3);
}
}
}
else {
if (flag2 == 0) {
if (flag3 == 0) {
printf("%d NONE NONE",a1);
}
else {
printf("%d NONE %d",a1, a3);
}
}
else {
if (flag3 == 0) {
printf("%d %d NONE",a1, a2);
}
else {
printf("%d %d %d",a1, a2, a3);
}
}
}
return 0;
}
第二次
//怒改,但是有问题
#include<stdio.h>
int main() {
int a1 = 0, a2 = 0, a3 = 0, n = 0, i = 0;
int max = 0, sum = 0, count = 0;
char num,ch;
scanf("%d", &n);
//除去输入n之后的\n
ch = getchar();
num = getchar();
while (num!='\n') {
//判断a1---遍历输入的每个数,找到最大值并输出(写过但忘记怎么写的了
max = num;
for (i = 1;i <= n;i++) {
num = getchar();
if (num > max) {
max = num;
}
}
printf("%d ", a1);
//判断a2
if (num % 3 == 1) {
a2++;
}
//判断a3
if (num % 3 == 2) {
sum += num;
count++;
//这里有问题,a2应该改成double类型
a3 = 1.0 * sum / count;
}
}
//单个判断,单个输出
if (a2 != 0) {
printf("%d ", a2);
}
else {
printf("NONE ");
}
if (a3 != 0) {
printf("%d", a3);
}
else {
printf("NONE");
}
return 0;
}
第三次
再次怒改,还是有问题
#include<stdio.h>
int main() {
int a1 = 0, a2 = 0, n = 0, i = 0;
int max = 0, sum = 0, count = 0;
double a3 = 0;
char num,ch1,ch2;
scanf("%d", &n);
//除去输入n之后的\n
ch1 = getchar();
num = getchar();
while (num!='\n') {
//判断a1---遍历输入的每个数,找到最大值并输出(写过但忘记怎么写的了
//找a1有问题,a1应该是用for循环,只要一直输入,一直遍历就可以了,不需要在for里面套for
因为输入的过程已经是遍历了,直接比较就可以
max = num;
for (i = 1;i <= n;i++) {
num = getchar();
if (num > max) {
max = num;
}
}
printf("%d ", a1);
//判断a2
if (num % 3 == 1) {
a2++;
}
//判断a3
if (num % 3 == 2) {
sum += num;
count++;
a3 = 1.0 * sum / count;
}
}
ch2 = getchar();
//单个判断,单个输出
if (a2 != 0) {
printf("%d ", a2);
}
else {
printf("NONE ");
}
if (a3 != 0) {
printf("%d", a3);
}
else {
printf("NONE");
}
return 0;
}
网上的学习一下
#include<stdio.h>
int main()
{
int n, a2 = 0, a3 = 0, i, x, max = 0, sum = 0;
scanf("%d", &n);
for (i = 0;i < n;i++) {
scanf("%d", &x);
if (x % 3 == 0 && x > max) //得到A1数
max = x;
if ((x - 1) % 3 == 0) //成立的个数==A2
a2++;
if ((x - 2) % 3 == 0) //成立的整数和/成立的个数==A3
{
a3++; sum += x;
}
}
if (max == 0) printf("NONE "); //按照题目说的a1,a2,a3中某个值不在就输出HONE
else printf("%d ", max);
if (a2 == 0) printf("NONE ");
else printf("%d ", a2);
if (sum == 0) printf("NONE");
else printf("%.1f", sum * 1.0 / a3);
return 0;
}
第四次
再次怒改,还是不对(泪
#include<stdio.h>
int main() {
int a1 = 0, a2 = 0, n = 0, i = 0;
int sum = 0, count = 0;
double a3 = 0;
char num,ch;
scanf("%d", &n);
//除去输入n之后的\n
ch = getchar();
num = getchar();
while (num!='\n') {
//判断a1---遍历输入的每个数,找到最大值并输出
num = getchar();
a1 = num;
if (num % 3 == 0 && num > a1) {
a1 = num;
}
printf("%d ", a1);
//判断a2
if (num % 3 == 1) {
a2++;
}
// 判断a3
if (num % 3 == 2) {
sum += num;
count++;
a3 = 1.0 * sum / count;
}
}
//单个判断,单个输出
if (a1 != 0) {
printf("%d", a1);
}
else {
printf("NONE");
}
if (a2 != 0) {
printf("%d ", a2);
}
else {
printf("NONE ");
}
if (a3 != 0) {
//这里输出类型有错误
printf("%d", a3);
}
else {
printf("NONE");
}
return 0;
}
第五次
堂堂正确(喜
#include<stdio.h>
int main() {
int a1 = 0, a2 = 0, n = 0, i = 0,num=0;
int sum = 0, count = 0;
double a3 = 0;
scanf("%d", &n);
for (i = 1;i <= n;i++) {
scanf("%d", &num);
//因为a1已经初始化过了,所以不用再假设a1=num
if (num % 3 == 0 && num > a1) {
a1 = num;
}
if (num % 3 == 1) {
a2++;
}
if (num % 3 == 2) {
count++;
sum += num;
a3 = 1.0 * sum / count;
}
}
//单个判断,单个输出
if (a1 != 0) {
printf("%d ", a1);
}
else {
printf("NONE ");
}
if (a2 != 0) {
printf("%d ", a2);
}
else {
printf("NONE ");
}
if (a3 != 0) {
printf("%.1lf", a3);
}
else {
printf("NONE");
}
return 0;
}