4.1
题目描述
编程序,实现如下功能:
(1)定义两个一维数组x,y,不超过50个元素。
(2)从键盘输入k个整数到数组x中。
(3)计算x中数据的平均值ave及大于平均值的元素个数n并输出。
(4)将数组x中数据复制到数组y中,重复的数据只存储一次,最后输出y中的数据。
#include <iostream>
using namespace std;
int main()
{
int x[50] = { 0 };
int y[50] = { 0 }; //7
int k;
cin >> k; //输入
int sum = 0;
for (int i = 0; i < k; i++)
{
cin >> x[i];
sum += x[i]; //输入和求和在一起 //10
}
double ave = (double)sum / k; // 1 //4
cout << ave << " "; //平均数
int n = 0;
for (int i = 0; i < k; i++)
{
if (x[i] > ave)
n++;
}
cout << n << endl; // 大于平均数的个数 //6
/*for (int i = 0; i < k; i++)
{ int w = 0;
for (int j = i-1; j >= 0; j--) // 2
{
if (x[i] == x[j]) //5
w++;
}
if (w > 0)
num++;
//if (num == 0) num之后不可能为零 //8
//y[i] = x[i + num]; //9 // 3
y[i - 1] = x[i+1];
}
*/
int m = 0;
for ( int j = 0; j < k; j++) //x
{
int w = 0;
for ( w = j - 1; w >= 0; w--)
{
if (x[j] == x[w])
{
break;
}
}
if (w < 0) //和素数思路一样
{
y[m] = x[j];
m++; //赋值后才加1,在if里
}
}
for (int i = 0; i < m; i++) //11
cout << y[i] << " ";
return 0;
}
4.2
题目描述
有 12 人围坐成一圈玩报数游戏,从1号人员开始顺时针报数,报到k的人员被淘汰出局;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从 1 开始报数,报到 k的人被淘汰;如此继续,直到最后只剩下一个人时停止。请编写程序输出最后所剩那个人的编号。
注意:(1)假设参加游戏的人的编号沿顺时针方向依次为 1 到 12,可以使用数组来存放各数据;
(2)k>1,由用户通过 cin 输入指定。
#include <iostream>
using namespace std;
int main()
{
int i = 0;
int k = 0;
int p[13];
for (i = 0; i < 13; i++)
p[i] = i;
cin >> k;
i = 1;
for(int j = 1; j < 12; j++)
for (int m = 1; m <= k;)
{
if (i > 12)
i = i - 12;
if (p[i] == 0 ) //tiaoguo
{
i = i + 1;
continue;
}
if (p[i] != 0 && m < k) //
{
i = i + 1;
m++; //jishu
}
if (p[i] != 0 && m == k) //
{
p[i] = 0;
i = i + 1;
break;//taotai
}
}
for (i = 0; i < 13; i++)
{
if (p[i] != 0)
cout << p[i];
}
return 0;
}
4.3
题目描述
小宗想知道两个日期之间所间隔的天数,他希望有一个日期计算器,输入两个日期后能够自动计算之间的天数。要求:设计相应的函数完成天数的计算,在主函数中验证正确性。
#include <iostream>
using namespace std;
int months[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int dayOfYear(int year)
{
int day = 0;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
day = 366;
else
day = 365;
return day;
}
int days(int year, int month, int day)//那天之前的天数
{
if (dayOfYear(year) == 366)
months[1] = 29;
int sum_1 = 0;
for (int i = 1; i < month; i++)
{
sum_1 += months[i - 1];
}
sum_1 += day;
return sum_1;
}
int main()
{
int sum = 0;
int sum_2 = 0;
int year_2, month_2, day_2,year_1, month_1, day_1 ;
cin >> year_2 >> month_2 >> day_2;
cin >> year_1 >> month_1 >> day_1;
sum = 0;
for (int i = year_2; i < year_1; i++)
{
sum_2 += dayOfYear(i);
}
sum = sum_2 + days(year_1, month_1, day_1) - days(year_2, month_2, day_2);
cout << sum;
return 0;
}
4.4
题目描述
对于整型数组a[10]和b[10],编制程序完成下列任务:
(1)由用户从键盘为两个数组输入值;
(2)求出两个数组的最大值和最小值;
(3)把数组a和b中的整数分别从小到大和从大到小排序;
(4)把两个有序的数组a和b组成一个长度为20的有序数组c[20],使数组c的顺序为从小到大。
#include <iostream>
using namespace std;
int min(int p[], int n)
{
int MIN = p[n - 1];
for (int i = 0; i < (n - 1); i++)
if (p[i] < MIN)
MIN = p[i];
return MIN;
}
int max(int p[], int n)
{
int MAX = p[0];
for (int i = 1; i < n; i++)
if (p[i] > MAX)
MAX = p[i];
return MAX;
}
int sortXiaoDaoDa(int p[], int n)
{
int temp;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (p[j] > p[j + 1])
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
return 0;
}
int sortDaDaoXiao(int p[], int n)
{
int temp;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (p[j] < p[j + 1])
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
return 0;
}
int main()
{
int c[20];
int a[10] = { 0 }, b[10] = { 0 };
int maxA = a[0], minA = a[9], maxB = b[0], minB = b[9];
int i;
for (i = 0; i < 10; i++)
cin >> a[i];
for (i = 0; i < 10; i++)
cin >> b[i];
maxA = max(a, 10);
minA = min(a, 10);
maxB = max(b, 10);
minB = min(b, 10);
cout << maxA << " " << minA << endl;
cout << maxB << " " << minB << endl;
sortXiaoDaoDa(a, 10);
sortDaDaoXiao(b, 10);
for (i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
for (i = 0; i < 10; i++)
cout << b[i] << " ";
cout << endl;
for (i = 0; i < 20; i++)
if (i < 10)
c[i] = a[i];
else
c[i] = b[i - 10];
sortXiaoDaoDa(c, 20); //
for (i = 0; i < 20; i++)
cout << c[i] << " ";
return 0;
}
4.5
题目描述
利用cin.getline()函数从键盘录入一句英文,其中每个单词之间用一个空格隔开,最后用'.'结束。统计该句话中单词的个数,并依次输出每个单词。输出个数后换行,输出每个单词后也换行。注意:在本平台下,cin.getline()函数的使用方式如下:
char s[50];
cin.getline(s,50); //最多存储49个字符
#include <iostream>
using namespace std;
int main()
{
char s[50];
int count = 0;
cin.getline(s, 50);
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] != ' ' && s[i] != '.')
{
cout << s[i];
}
else
{
cout << endl;
count++;
}
}
cout << count;
return 0;
}