問題描述:
給定一系列正整數(shù)锣吼,請按要求對數(shù)字進(jìn)行分類确丢,并輸出以下 5 個(gè)數(shù)字:A1= 能被 5 整除的數(shù)字中所有偶數(shù)的和;A2= 將被 5 除后余 1 的數(shù)字按給出順序進(jìn)行交錯(cuò)求和吐限,即計(jì)算 n1?n2+n3?n4? 。A3= 被 5 除后余 2 的數(shù)字的個(gè)數(shù)褂始;A4= 被 5 除后余 3 的數(shù)字的平均數(shù)诸典,精確到小數(shù)點(diǎn)后 1 位;A5= 被 5 除后余 4 的數(shù)字中最大數(shù)字崎苗。
輸入格式:
每個(gè)輸入包含 1 個(gè)測試用例狐粱。每個(gè)測試用例先給出一個(gè)不超過 1000 的正整數(shù) N,隨后給出 N 個(gè)不超過 1000 的待分類的正整數(shù)胆数。數(shù)字間以空格分隔肌蜻。
輸出格式:
對給定的 N 個(gè)正整數(shù),按題目要求計(jì)算 A1~A5 并在一行中順序輸出必尼。數(shù)字間以空格分隔蒋搜,但行末不得有多余空格篡撵。若其中某一類數(shù)字不存在,則在相應(yīng)位置輸出 N豆挽。
輸入樣例 1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
輸出樣例 1:
30 11 2 9.7 9
輸入樣例 2:
8 1 2 4 5 6 7 9 16
輸出樣例 2:
N 11 2 N 9
這道題算是很簡單的育谬,但是對輸出精度的格式不熟悉的話就不能按照題目要求輸出精確到小數(shù)點(diǎn)后一位的浮點(diǎn)數(shù)。
實(shí)現(xiàn)如下:
#include <stdio.h>
int main()
{
int count;
scanf("%d",&count);
if (count > 1000)
{
return -1;
}
int number[1000] = {0};
for (int i = 0 ; i < count ; i++)
{
scanf("%d",&number[i]);
}
double results[5] = {0.0};
int circleCount1 = 0;
int circleCount2 = 0;
for (int i = 0 ; i < count ; i++)
{
//求A1
if ((number[i] % 5) == 0 && (number[i] % 2) == 0)
{
results[0] = results[0] + number[i];
}
//求A2
if ((number[i] % 5) == 1)
{
circleCount1++;
if ((circleCount1 % 2) != 0)
{
results[1] = results[1] + number[i];
}
else
{
results[1] = results[1] - number[i];
}
}
//求A3
if ((number[i] % 5) == 2)
{
results[2]++;
}
//求A4
if ((number[i] % 5) == 3)
{
circleCount2++;
results[3] = results[3] + number[i];
}
//求A5
if ((number[i] % 5) == 4)
{
if (number[i] > results[4])
{
results[4] = number[i];
}
}
}
if (circleCount2 != 0)
{
results[3] /= circleCount2;
}
for (int i = 0 ; i < 5 ; i++)
{
if (results[i] == 0.0)
{
printf("%c",'N');
}
else
{
if (i == 3)
{
printf("%.1f",results[3]);
}
else
{
printf("%d",(int)results[i]);
}
}
if (i != 4)
{
printf("%c",' ');
}
}
return 0;
}
或者如下:
#include <iostream>
using namespace std;
int main()
{
int count;
cin >> count;
if (count > 1000)
{
return -1;
}
int number[1000] = {0};
for (int i = 0 ; i < count ; i++)
{
cin >> number[i];
}
double results[5] = {0.0};
int circleCount1 = 0;
int circleCount2 = 0;
for (int i = 0 ; i < count ; i++)
{
//求A1
if ((number[i] % 5) == 0 && (number[i] % 2) == 0)
{
results[0] = results[0] + number[i];
}
//求A2
if ((number[i] % 5) == 1)
{
circleCount1++;
if ((circleCount1 % 2) != 0)
{
results[1] = results[1] + number[i];
}
else
{
results[1] = results[1] - number[i];
}
}
//求A3
if ((number[i] % 5) == 2)
{
results[2]++;
}
//求A4
if ((number[i] % 5) == 3)
{
circleCount2++;
results[3] = results[3] + number[i];
}
//求A5
if ((number[i] % 5) == 4)
{
if (number[i] > results[4])
{
results[4] = number[i];
}
}
}
if (circleCount2 != 0)
{
results[3] /= circleCount2;
}
for (int i = 0 ; i < 5 ; i++)
{
if (results[i] == 0.0)
{
cout << "N";
}
else
{
if (i == 3)
{
cout.flags(ios::fixed);
cout.precision(1);
cout << results[3];
}
else
{
cout << (int)results[i];
}
}
if (i != 4)
{
cout << ' ';
}
}
return 0;
}
現(xiàn)在來復(fù)習(xí)一下C/C++中數(shù)據(jù)輸出的格式控制
數(shù)據(jù)的輸出格式控制:
C語言中:
1.在C語言中帮哈,頭文件stdio.h中的printf函數(shù)(標(biāo)準(zhǔn)的格式輸出函數(shù))可以按照指定的格式輸出數(shù)據(jù)膛檀。printf函數(shù)的聲明:
int __CRTDECL printf(char const* const _Format,...);
printf函數(shù)聲明在圓括號內(nèi)包含格式控制和輸出表列兩部分。格式控制:格式控制是由雙引號引起來的格式字符串娘侍,也稱為“轉(zhuǎn)換控制字符串”咖刃。它包括兩部分:
1.格式說明符:如%d,%f等,它的作用是將要輸出的數(shù)據(jù)轉(zhuǎn)換成指定的格式輸出憾筏。格式說明符總是由%字符開始的嚎杨。
2.普通字符:即需要原樣輸出的字符主要是解釋說明奔缠。printf("%d,%c\n",a,ch1);
這句代碼中雙引號內(nèi)的逗號和換行符就是普通字符尉桩。
注意格式說明符中%后面的字符就是格式字符掉分,常見的字符如下:
對于%e這個(gè)格式說明符來說焦履,數(shù)字部分的小數(shù)位數(shù)占6位榕堰,指數(shù)占4位权谁。小數(shù)點(diǎn)前必須有且僅有一位非0數(shù)字贞谓。
對于數(shù)據(jù)輸出一定的長度的控制铲汪,我們來看示例:
1.整形數(shù)據(jù)的輸出
#include <cstdio>
int main()
{
int a = 12;
long b = 2456988;
printf("a = %d,a = %6d,a = %-6d,a = %06d\n",a,a,a,a);
printf("%ld\n",b);
printf("%d,%o,%x",a,a,a);
printf("\n");
return 0;
}
//運(yùn)行結(jié)果如下:
//a = 12, a = 12, a = 12, a = 000012
//2456988
//12, 14, c
%d:表示按照整形數(shù)據(jù)類型的整數(shù)的實(shí)際長度輸出
%6d:表示該數(shù)據(jù)的輸出占六位斤富,如果不足六位左邊補(bǔ)以空格
%-6d:表示以左對齊方式輸出膏潮,如果不足六位右邊補(bǔ)上空格
%06d:表示數(shù)據(jù)的輸出占6位,如果不足六位满力,左邊補(bǔ)上0
%ld:輸出長整型整數(shù)
2.實(shí)型數(shù)據(jù)的輸出
#include <cstdio>
int main()
{
float x = 123.456;
double y = 123.45678;
printf("%f,%f\n",x,y);
printf("%.1f,%.1f\n", x, y);
printf("%8.2f,%10.3f\n",x,y);
printf("%e\n",x);
return 0;
}
//運(yùn)行結(jié)果
//123.456001, 123.456780
//123.5, 123.5
//123.46, 123.457
//1.234560e+02
%f的精度缺省值為6位
%.1f表示數(shù)據(jù)輸出時(shí)精度為1
%8.2f表示數(shù)據(jù)的輸出占八位焕参,小數(shù)點(diǎn)后占兩位(精度為2)。
%e:表示將實(shí)型數(shù)據(jù)按照指數(shù)形式輸出油额。
3.字符型數(shù)據(jù)的輸出
#include <cstdio>
int main()
{
char c = 'a';
printf("%c\n",c);
printf("%5c\n", c);
printf("%-5c\n", c);
return 0;
}
%5c:表示將數(shù)據(jù)輸出叠纷,不足五位則左邊補(bǔ)上空格
%-5c:表示將數(shù)據(jù)輸出,不足五位則右邊補(bǔ)上空格
4.字符串的輸出
#include <cstdio>
int main()
{
printf("%3s\n","CHINA");
printf("%7.2s\n", "CHINA");
printf("%.4s\n", "CHINA");
printf("%-5.3s\n", "CHINA");
return 0;
}
%ms:表示輸出指定寬度的字符串,若m大于字符串的實(shí)際長度潦嘶,則左端補(bǔ)上空格涩嚣,否則按照實(shí)際長度輸出
%-ms:如果m大于字符串的實(shí)際長度,則輸出的字符串在m列范圍內(nèi)左對齊掂僵,右端補(bǔ)上空格航厚。
%m.ns:輸出占m列,但只截取字符串的前n個(gè)字符,這n個(gè)字符輸出在m列的右端锰蓬,左端補(bǔ)上空格幔睬。
%-m.ns:mn的含義同上,只是n個(gè)字符輸出在m列的左端芹扭,右端補(bǔ)上空格麻顶。
C++中:
#include <iostream>
#include <iomanip> //for setprecision()
using namespace std;
int main()
{
float a = 123.236554;
cout.flags(ios::fixed);
cout.precision(2); //將a這個(gè)單精度實(shí)數(shù)精確到兩位輸出
cout << a; //123.24
return 0;
}