“无论是否能验证其真伪,都应无条件给予其基本的善意和尊重,是人性中的善良本能,是我们之所以成为人的前提,也是维系文明的纽带” PEACE & LOVE
1036 跟奥巴马一起编程
思路: 两种字符串形式,首尾两行和中间部分,根据输入的值组成字符串输出即可。
#include<stdio.h>
#define LEN 30
int main() {
int column, row;
char ch, firstRow[LEN], _row[LEN];//firstRow[]首尾两行, ——row[]中间部分
scanf("%d %c", &column, &ch);
row = (int)(1.0*column/2+0.5)-2;//四舍五入
for(int i=0; i<column; i++)
firstRow[i] = ch;
firstRow[column] = '\0';//字符串末尾添加结束符
_row[0] = ch;//中间部分的每一行的头尾是字符
for(int i=1; i<column-1; i++)//中间部分是空格
_row[i] = ' ';
_row[column-1] = ch;
_row[column] = '\0';
printf("%s\n", firstRow);
while(row-- > 0)
printf("%s\n", _row);
printf("%s", firstRow);
return 0;
}
1037 在霍格沃茨找零钱
思路: 转换为最小单位进行计算,通过取余输出结果。计算累加和之前一定要初始化为0!!!
#include<stdio.h>
#define LEN 10
int main() {
int price[LEN], pay[LEN], rate[] = {17, 29, 1};//应付价格, 实付价格
pay[0] = price[0] = 0;
scanf("%d.%d.%d %d.%d.%d", &price[1], &price[2], &price[3], &pay[1], &pay[2], &pay[3]);
for(int i=1; i<4; i++) { //将价格转为最小单位;结果存储在0位置上
for(int j=i; j<4; j++) {
pay[i] *= rate[j-1];
price[i] *= rate[j-1];
}
pay[0] += pay[i];
price[0] += price[i];
}
if(price[0] <= pay[0]) { //支付大于应付
pay[0] -= price[0];
} else {
pay[0] = price[0] - pay[0];
putchar('-');
}
printf("%d.%d.%d", pay[0]/(rate[0]*rate[1]), pay[0]%(rate[0]*rate[1])/29, pay[0]%29);
return 0;
}
1038 统计同成绩学生
思路: 用哈希表,成绩作为下标,数组内容记录该成绩学生个数;
#include<stdio.h>
#define LEN 101
int main() {
int cnt, tmp, grade[LEN] = {0};
scanf("%d", &cnt);
for(int i=0; i<cnt; i++) {
scanf("%d", &tmp);//成绩作为数组下标,数组内容记录该成绩学生数量
grade[tmp]++;
}
scanf("%d", &cnt);
for(int i=0; i<cnt; i++) {
scanf("%d", &tmp);
printf("%d", grade[tmp]);
if(i != cnt-1)
putchar(' ');
}
return 0;
}
1039 到底买不买
思路: 对商家所卖珠子利用字符的asc码作数组下标存储各珠子数量。之后判断所需珠子数量是否足够即可。
#include<stdio.h>
#include<ctype.h>
#define LEN 100
int main() {
int ch, cnt, _cnt, index, possesses[LEN]= {0};
cnt = _cnt = 0;//珠子数量和所需珠子数量
while((ch=getchar()) != '\n') {
if(isdigit(ch))
index = ch-'0';
else if(islower(ch))
index = ch-'a'+10;
else if(isupper(ch))
index = ch-'A'+36;
possesses[index]++;
cnt++;
}
while((ch=getchar()) != '\n') {
if(isdigit(ch))
index = ch-'0';
else if(islower(ch))
index = ch-'a'+10;
else if(isupper(ch))
index = ch-'A'+36;
if(possesses[index]) {//该颜色珠子数量不为零
possesses[index]--;
cnt--;
} else
_cnt++;//珠子缺少数量加一
}
if(!_cnt)
printf("Yes %d", cnt);
else
printf("No %d", _cnt);
return 0;
}
1040 有几个PAT
思路: 对于每个A, A前边P的个数 * A后边T的个数就是这个A可以组成的PAT的个数。所以通过两次遍历确定每个A前有多个P,后有多少个T,乘积求和得到PAT个数。P T的个数要定义为long。
#include<stdio.h>
#include<string.h>
#define LEN 100001
int main() {
char str[LEN];
int arr[LEN] = {0};
long cnt, sum;
scanf("%s", &str);
cnt = sum = 0;
for(int i=0; str[i]!='\0'; i++) {
if(str[i] == 'P')
cnt++;
else if(str[i] == 'A')
arr[i] = cnt;
}
cnt = 0;
for(int i=strlen(str); i>=0; i--) {
if(str[i] == 'T')
cnt++;
else if(str[i] == 'A')
sum += arr[i]*cnt;
}
printf("%d",sum%1000000007);
return 0;
}