1004#成绩排名#
这道题还是比较简单的,因为只需要得出成绩最高的和最低的,所以成绩排序用的是冒泡排序,排序中记住最大的和最小的序号,一会输出时会用到。在存入中,我是练习一个个字符存入的,这是比较麻烦的。
总结(对于我这种菜鸟需要注意的是):
(1)存10个数据到数组中,数组的初始化得是【11】;
(2)要充分考虑存入数组的个数,因为百位可能没有;
(3)判断字符是否是空格时,不能用‘\0’,用getchar!=32;
(4)有个测试点的数据是100组;
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char name[101][11] = { 0 };
char id[101][11] = { 0 };
char record[101][4] = { 0 };
int grad[101] = { 0 };
int a,i ,j ,temp=0,max=0 ,min=0;
//存储
//int a= getchar() - 48;
scanf("%d", &a);
getchar();
for (i = 0; i < a; i++)
{
for (j = 0; (name[i][j] = getchar()) != 32; j++) {}
for (j = 0; (id[i][j] = getchar()) != 32; j++) {}
for (j = 0; (record[i][j] = getchar()) != '\n'; j++) {}
grad[i] = record[i][0] - 48;
for (j = 1; (record[i][j]) != '\n'; j++)
{
grad[i] = grad[i] * 10 + (record[i][j] - 48);
}
}
//比较
temp = grad[0];
for (j = 1; j < a; j++)
{
if (grad[j] > temp)
{
temp = grad[j];
max = j;
}
}
temp = grad[0];
for (j = 1; j < a; j++)
{
if (grad[j] < temp)
{
temp = grad[j];
min = j;
}
}
//输出max
for (j = 0; name[max][j] != 32; j++)
{
printf("%c", name[max][j]);
}
putchar(32);
for (j = 0; id[max][j] != 32; j++)
{
printf("%c", id[max][j]);
}
putchar(10);
//输出min
for (j = 0; name[min][j] != 32; j++)
{
printf("%c", name[min][j]);
}
putchar(32);
for (j = 0; id[min][j] != 32; j++)
{
printf("%c", id[min][j]);
}
putchar(10);
system("pause");
return 0;
}
1005 #继续(3n+1)猜想#
这道题还是比较复杂的,总体通过率比较低。居然花了一天的时间,主要是调试错误。定义几个全局变量数组,其中shu[][]是经过callatz运算过后数组存储成的二维数组,su[]是输入的数字组成的数组,s[]是最终结果组成的数组,bi[]是经过比较后数经过排序的数组。
首先读取输入的下面数字的总数,一个一个先存入su[]数组,然后把经过callatz函数运算后的数字对应存入shu[][]二维数组。bijiao函数就是判断su[]中的数是否在shu[][]中。如果在,则采用循环溢出方法跳出循环(l = a; r = 999;);如果判断到底都不在,则存入s[]中。最后对s[]中的数进行排序。
菜鸟总结:
(1)在include下定义全局变量
(2)数存入数组时,是整个数存入数组,不是一位数存进去的
(3)!!!三重循环跳出二重循环,把里面的语句设成溢出,可以加上判断条件r!=999
(4)flag记得还原成0
(5)冒泡排序要把最初的temp赋值成1(也就是排序后改成的那个数字)
代码如下:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
int shu[100][200] = {0};//运算过后组成的二维数组
int su[100] = { 0 };//输入的数 组成的数组
int s[100] = { 0 };//最终结果组成的数组
int bi[100] = { 0 };//比较后的数组
int i ,a , m = 0,h =0,x=0;
void callatz(int b)
{
if (b == 1)
{
}
else if (b % 2 == 0) {
b = b / 2;
shu[i][m]= b; m++;
callatz(b);
}
else {
b = (3 * b + 1) / 2;
shu[i][m] = b; m++;
callatz(b);
}
}
void bijiao()
{
int l,r;
for (int k = 0; su[k] != '\0'; k++)
{
for ( l = 0; l < a; l++)
{
for ( r = 0; (r!=1000)&&(shu[l][r] != '\0'); r++)
{
if (su[k] == shu[l][r])
{
l = a; r = 999;
}
}
}
if (l == a) {
s[h] = su[k]; h++;
}
}
}
void paixu()
{
int temp2; x = 0;
for (a = 0; s[a] != '\0'; a++)
{
temp2 = 1;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] > temp2)
{
temp2 = s[i];
x = i;
}
}
bi[a] = temp2;
s[x] = 1;
}
}
int main(int argc,char *argv[])
{
int b,j;
scanf("%d", &a);
for (i = 0; i < a; i++)
{
scanf("%d", &b);
m = 0;
su[i]= b;
callatz(b);
}
bijiao();
paixu();
for (j = 0; bi[j+1] != '\0'; j++)
{
printf("%d", bi[j]);
putchar(32);
}
printf("%d", bi[j]);
return 0;
}
1006#换个格式输出整数#
这道题还是挺简单的,对输入的数字分离出百位十位个位,然后按照相应的要求输出,代码如下:
#include<iostream>
using namespace std;
int main()
{
int x,bai,shi,ge,i;
cin >> x;
bai = (x - (x % 100)) / 100;
x = x - bai * 100;
shi = (x - (x % 10)) / 10;
x = x - shi * 10;
ge = x;
for (i = 0; i < bai;i++)
{
cout << "B";
}
for (i = 0; i < shi; i++)
{
cout << "S";
}
for (i = 1; i <= ge; i++)
{
cout << i;
}
return 0;
}