题目:
1.求并输出所有满足如下条件的三位正整数:它是某整数的平方,它的三位数有两位是相同的。如100是10的平方,它有两个0,225是15的平方,它有两个2。
2.从键盘输入10名学生的成绩,显示与平均成绩最接近的三个成绩。
3.利用循环打印如下5行字符。
4.?中国有句俗语“三天打鱼两天晒网”,某人从03年1月1日起三天打鱼两天晒网,编程计算某月某日,他在打鱼还是在晒网。某月某日从键盘输入,打鱼则输出1,晒网则输出0。
5.字符串逆序。例如输入字符串”I am happy today”,则输出” I ma yppah yadot”。
6.数字根指的是。例如,24,的数字根是6,就是每位数相加的和,39的数字和是12,12不是一位数,所以再把12的每一位求和,是3,那么39的数字根就是3.
7.
?8.
比如一场电影一共售出5张票,结果来了5个人,每个人手里拿的票号分别是3 3 1 2 4,两张3,那么3这种票,就有一张是假票。再比如一场电影一共售出6张票,结果来了10个人,每个人手里拿的票号分别是6 1 3 6 6 4 2 3 1 2,3张6,2张3,2张2,2张1,那么这场电影就有4种假票,分别是6号,3号,2号,和1号。
编写程序,找出每场比赛一共有多少种假票。
9.
对于第1轮的比赛,他拿着一瓶酒,将大厅里所有的房间都打开了。对于第二轮,他拿着一瓶酒,然后将大厅所有偶数号房间锁起来(2,4,6,...).对于第3轮,他拿着一瓶酒,然后跑向大厅。这一次他只观察房间号为(3,6,9,...).的房间。如果该房间 已经锁定,将他解锁,如果它没有被锁定,他锁定它。对于第4轮,他拿着一瓶酒,然后跑向大厅。这一次他只观察房间号为(4,8,12,...).的房间。如果该房间 已经锁定,将他解锁,如果它没有被锁定,他锁定它。这样重复下去,n轮比赛后,这个狱卒晕了过去。 输入 输入的第一行包含一个正整数。这是后面的行数。下面的每一行包含一个数字
输出 对于每一行,你必须打印出来的是。当狱卒晕过去之后,有几个房间是开着的,犯人可以逃出去。
?解题:
1.求并输出所有满足如下条件的三位正整数:它是某整数的平方,它的三位数有两位是相同的。如100是10的平方,它有两个0,225是15的平方,它有两个2。
? ? ? ? 因为是三位正整数,所以并没有使用递归等方法。
#include<stdio.h>
bool judge(int n)
{
int wei = 1;
int wei1 = 10;
int wei2 = 100;
int a=0;
int b=0;
int c=0;
a = (n / wei) % 10;
b = (n / wei1) % 10;
c = (n / wei2) % 10;
if (a==b||b==c||a==c) //判断个十百是否有两位是相同的
{
return true;
}
else
{
return false;
}
}
int main()
{
int n ;
int arr[] ={0};
for (n = 10; n * n <= 1000 && (n * n )>= 100; n++)//算出拥有的三位数整数
{
if (judge(n*n))
{
printf(" %d ", n * n);
}
}
return 0;
}
2.从键盘输入10名学生的成绩,显示与平均成绩最接近的三个成绩。
? ? ? ? 通过排序,选择中间两个数,之后对靠近的两个数比较谁更加接近平均值即可
#include<iostream>
using namespace std;
double jud(double a, double b, double ppp)
{
if (fabs(ppp-a)>= fabs(ppp - a)) //fabs是绝对值 判断两者谁的绝对值更小
{
return b;
}
else
{
return a;
}
}
int main()
{
double a[10]={0};
double all=0;
for (int i = 0; i < 10; i++) //集体输入数组
{
cin >> a[i];
}
for (int i = 0; i < 10; i++)
{
all += a[i]; //算出总分
}
double c = all / 10; //平均分
for (int i = 0; i < 9; i++) //通过冒泡排序,做出中间的排序
{
for (int j = i + 1; j < 10; j++)
{
if (a[i] < a[j])
{
c = a[i];
a[i] = a[j];
a[j] = c;
}
}
}
//因为有10个数,所以排序后4和5最接近,然后只有判断3和6谁更加接近即可
cout <<"平均值最近的三个成绩:" << a[4] << " " << a[5]<<" "<< jud(a[3],a[6],c);
return 0;
}
3.?利用循环打印如下5行字符。
????????
#include<stdio.h>
int main()
{
int i, j, k = 0, p = 0;
for (i = 0; i < 5; i++) //输出多少行
{
k++; //控制输出a,b,c等等的次数的
for (j = 0; j <k; j++)
{
p++;
printf("%c", 96 + p);
}
p -= i; //将p恢复到上一行最后的字母
for (int q = 0; q < 5-k; q++) //k的逐渐减少
{
printf("k");
}
printf("\n");
}
return 0;
}
4.中国有句俗语“三天打鱼两天晒网”,某人从03年1月1日起三天打鱼两天晒网,编程计算某月某日,他在打鱼还是在晒网。某月某日从键盘输入,打鱼则输出1,晒网则输出0。
? ? ? ? 因为没有说年,所以只写了日和月
#include<iostream>
using namespace std;
int main()
{
int a[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//2003年的
int allData = 0;
int month = 0;
int date = 0;
loop:
cout << "请输入月份:";
cin >> month;
if (month>12||month<1)
{
goto loop; //这是为了防呆,可以不写
}
pic:
cout << "请输入日:";
cin >> date;
if (date > 31 || date < 1)
{
goto pic; //这是为了防呆,可以不写
}
for (int i = 0; i < month; i++)
{
allData += a[i]; //算出在几月之前过了多少天,如5月,则是前4个月过了多少天
}
allData += date; //这个月的天数
int c = (allData % 5); //做5的公约数,算出前三天打鱼,后三天晒网
if (c==1|| c == 2 || c == 3 )
{
cout << 1; //"打鱼";
}
else
{
cout << 0;
}
return 0;
}
5.字符串逆序。例如输入字符串”I am happy today”,则输出” I ma yppah yadot”。
? ? ? ? 正常逆序很简单,但是要将单词进行逆序,就要搞一点想法
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin, a); //输入一串字符
int len = sizeof(a) / sizeof(a[0]); //计算字符的元素个数
while (1)
{
int i = 0;
for (int k = 0; k < len; k++)
{
if (a[k] == 32 || a[k] == '\0')//这里是发现如果是空格或者字符串结尾的时候
{
int p = k; //将k发现空格的位置保存
while (i < k) //将空格前面的单词进行逆序
{
int temp = a[i];
a[i] = a[k - 1];
a[k - 1] = temp;
i++;
k--;
}
k = p; //逆序结束后,将k放到发现空格的位置
i = k + 1;//i则是放到空格的后面一个
if (a[k] == '\0')//这是发现'\0'之后直接退出循环
{
break;
}
}
}
break;
}
cout << a;
return 0;
}
6.数字根指的是。例如,24,的数字根是6,就是每位数相加的和,39的数字和是12,12不是一位数,所以再把12的每一位求和,是3,那么39的数字根就是3.
????????
#include<iostream>
using namespace std;
int add1(int& n)
{
if (n==0)
{
exit(0);
}
int a = 0;
int b = 0;
while (n >=10) //一点点的将每个位数相加到最后
{
a = n / 10;
b = n % 10;
n = a + b;
}
return n;
}
int main()
{
int a;
int e;
loop:
cin >> a;
e = add1(a);
cout << "你输入的数字根是:" << e << endl;
goto loop; //这是搞特殊效果的,一般不要用,容易出错
return 0;
}
7.
#include<iostream>
using namespace std;
int main()
{
loop:
double a;
int n = 1;
double temp = 0;
cout << "请输入范围0.01-5.20之间:";
cin >> a;
if (a == 0)
{
exit(0);
}
else if(a < 0.01 || a>5.20) //保证效果
{
cout << "请重新输入:" << endl;
goto loop;
}
while (1) //视情况计算可以有多少块
{
temp += double(1) / (n + 1);
n++;
if (temp>=a)
{
break;
}
}
cout << (n-1)<<"块"<<endl;
goto loop;
return 0;
}
8.比如一场电影一共售出5张票,结果来了5个人,每个人手里拿的票号分别是3 3 1 2 4,两张3,那么3这种票,就有一张是假票。再比如一场电影一共售出6张票,结果来了10个人,每个人手里拿的票号分别是6 1 3 6 6 4 2 3 1 2,3张6,2张3,2张2,2张1,那么这场电影就有4种假票,分别是6号,3号,2号,和1号。编写程序,找出每场比赛一共有多少种假票。
????????
#include<iostream>
using namespace std;
int main()
{
int piao = 0; //找到票数和人数
int people = 0;
cin >> piao >> people;
int* p = new int(piao); //申请有票数这么多的内存大小
for (int i = 0; i < piao; i++) //将每一个数放在申请的内存上
{
cin >> p[i];
}
int sum = 0;
int xx = 0; //几种假票
for (int i = 0; i < people; i++)
{
for (int k = 0,l=0; k < people; k++)
{
if (p[i] == p[k]&&l==0) //通过对有的票的对比,如果是第一次出现,则给l加加
{
l++;
}
else if (p[i] == p[k] && l == 1) //如果相同的第二次出现了,则有一种,第三次就不关我们的事情了
{
xx++;
l++;
}
}
}
cout << (xx-1);
return 0;
}
9.
对于第1轮的比赛,他拿着一瓶酒,将大厅里所有的房间都打开了。对于第二轮,他拿着一瓶酒,然后将大厅所有偶数号房间锁起来(2,4,6,...).对于第3轮,他拿着一瓶酒,然后跑向大厅。这一次他只观察房间号为(3,6,9,...).的房间。如果该房间 已经锁定,将他解锁,如果它没有被锁定,他锁定它。对于第4轮,他拿着一瓶酒,然后跑向大厅。这一次他只观察房间号为(4,8,12,...).的房间。如果该房间 已经锁定,将他解锁,如果它没有被锁定,他锁定它。这样重复下去,n轮比赛后,这个狱卒晕了过去。 输入 输入的第一行包含一个正整数。这是后面的行数。下面的每一行包含一个数字
输出 对于每一行,你必须打印出来的是。当狱卒晕过去之后,有几个房间是开着的,犯人可以逃出去。
#include<iostream>
using namespace std;
int main()
{
//设1为有锁。0为开锁
int num = 0;
cin >> num;
int* p = new int[num];
for (int i = 0; i < num; i++) //给所有的房间开锁
{
p[i]=0;
if ((i + 1) % 2 == 0) //第二轮给房间锁门
{
p[i] = 1;
}
}
for (int n = 3; n <= num; n++)
{
for (int i = 0; i < num; i++)
{
if ((i + 1) % n == 0) //判断从3开始的接下来几轮
{
if (p[i]==0) //0变1,1变0
{
p[i] = 1;
}
else
{
p[i] = 0;
}
}
}
}
int openDoor = 0;
for (int i = 0; i < num; i++) //判断有几个开着的门
{
if (p[i]==0)
{
openDoor++;
}
}
cout << openDoor;
return 0;
}
|