1.说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
代码如下
int i, j;
char a[100][100];
for (i = 0;; i++)
{
scanf("%s", a[i]);//scanf遇见空格就会停止,所以可以录入一个单词
if (getchar() == '\n') break;//getchar()这个函数可以输入空格但不能输入换行符
}
for (j = i; j >= 0; j--)
{
printf("%s", a[j]);
}
- scanf会将空格也存放在缓冲区中,如果需要多次提取缓冲区中的信息且不取出空格,需要在调用scanf时,直接将换行符带上,或者在下一次调用时,使用getchar函数
2.素数(函数判断)
利用函数返回值的真假与主函数的判断相结合,判断一个数是否为素数。
该题为判断一个数是否为素数并且输出它随后的10个素数
代码如下
int sushu(int n)//1和0是 是和非
{
int i;
if (n == 1 || n == 0)
{
return 0;
}
for (i = 2; i < n; i++)
{
if (n%i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n, count;
scanf_s("%d", &n);
count = 0;
while (count < 10)
{
n--;
if (sushu(n))
{
printf("%6d", n);
count++;
}
}
return 0;
}
- 该sushu函数中,判断的范围可以改为i<sqrt(n),可以减少计算量(PTA中的运行超时)。
函数基本思路就是判断后返回给主函数1(是素数)或0(不是素数),再通过主函数中if语句判断,即可寻找素数。
3.联系人(单链表的使用与查找)
创建一个联系人册并且根据联系人姓名查询电话
代码如下
#define MAX 101;
struct aa//定义结构体aa用来存储电话号码和姓名
{
char name[15];
char tel[15];
};
int reading(struct aa *a)//创建电话号码和姓名,并存入结构体中
{
int i = 0, n = 0;
while (1)
{
scanf("%s", a[i].name);//输入姓名
if (!strcmp(a[i].name, "#"))//'#'为结束符.
break;
scanf("%s", a[i].tel);//输入电话号码
i++;
n++; //记录的条数
}
return n; //返回的条数
}
void search(struct aa *b, char *x, int n)//用来查询输入的姓名所对应的电话号码
{
int i = 0;
while (1)
{
if (!strcmp(b[i].name, x)) //查找与输入姓名相匹配的记录
{
printf("name:%s tel:%s\n", b[i].name, b[i].tel);//打印查到的姓名所对应的电话号码
break; //终止当前的动作
}
else
i++;
n--;
if (n == 0)
{
printf("No found!");
break;
}
}
}
int main()
{
struct aa s[MAX];//定义了一个结构体数组,长度为101
int num;
char name[15];
num = reading(s);//调用函数 reading() ,创建(姓名+电话)信息的个数
printf("input the name:");
scanf("%s", name);
search(s, name, num);
return 0;
}
使用最小花费爬楼梯(力扣)
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。
请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
示例 1:
输入:cost = [10, 15, 20]
输出:15
解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。
示例 2:
输入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出:6
解释:最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6 。
代码如下
int minCostClimbingStairs(int* cost, int costSize) {
int dp[costSize + 1];
dp[0] = dp[1] = 0;
for (int i = 2; i <= costSize; i++) {
dp[i] = fmin(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[costSize];
}
- 该题存在着动态规划问题,题目意思可以理解为每个阶梯都有一定数量金币,一次只能跨一个或者两个阶梯,走到一个阶梯就要拿走全部金币,问怎么走才能拿的最少?开局你选前两个阶梯的其中一个作为开头点,并且拿走该楼梯的所有金币。