算法复习材料由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“算法复习总结”。
1.假票统计
问题描述:
由于你们团队在国际大学生诗歌大赛上取得的巨大成就,你们学校决定为你们召开一次庆功鸡尾酒会,到来的人数大大超出了预期。然而庆功会的主管却抱怨发现了有人使用假票,实际的门票是从1到N(N
输入文件中包含多组测试数据,每组测试数据占两行。第1行包括两个整数N和M,分别表示门票的初始总张数和参加晚会的总人数(1
对每组输入测试数据,输出一个整数,占一行,表示收上来的门票中共有多少张票被伪造过。输入样例: 5 5 3 3 1 2 4 6 10 6 1 3 6 6 4 2 3 1 2 0 0 输出样例: 1 4
参考代码:
//计算有几个号码被复制过 #include #include #define N 10010 #define M 20010 intcnt[N];//cnt[i],i出现的次数 int main(){ int n, m,t;while(scanf(“%d%d”, &n, &m), n + m){ memset(cnt, 0, sizeof(cnt));int i, j, res = 0;for(i = 0;i 1){ res ++;} } printf(“%dn”, res);} return 0;}
2.看和说
问题描述:
看和说的顺序定义如下:任何一个字符串都是以数字开头,每个随后的元素都是被前一个元素重新定义。例如,字符串“122344111”可以被描述为“1个1,两个2,1个3,2个4和3个1”。因此,122344111以序列的形式表示出来就是1122132431。同理,101就表示1111111111。输入:
输入包括测试数据的组数,然后依次为相应的测试数据,每个数据占一行,不会超过1000位。输出: 对于每个测试数据,输出对应的字符串。
输入样例: 3 122344111 1111111111 12345 输出样例: 1122132431 101 1112131415 参考代码:
#include #include int main(){ char s[1001];intn,i,num,len;scanf(“%dn”,&n);while(n--){
num=1;
gets(s);
len=strlen(s);
for(i=0;i
{
if(s[i]!=s[i+1])
{
printf(“%d%c”,num,s[i]);
num=1;
}
else
num++;
}
printf(“n”);} return 0;}
3.二进制转化为十六进制
问题描述:
输入一个2进制的数,要求输出该2进制数的16进制表示。在16进制的表示中,A-F表示10-15 输入:
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000。输出:
n行,每行输出对应一个输入。输入样例:100000 111 输出样例:7
参考代码1:
#include #include int main(){
inti,n,dec,len;
char bin[10001];
scanf(“%d”,&n);
while(n--)
{
scanf(“%s”,bin);
len=strlen(bin);//求二进制数的长度
dec=4-len%4;
if(len%4)//处理头几位,后移dec位,使得变成4的整数倍,前面补0
{
for(i=len;i>=0;i--)
bin[i+dec]=bin[i];
for(i=0;i
bin[i]='0';
len+=dec;
}
for(i=0;i
printf(“%X”,(bin[i+3]-'0')+(bin[i+2]-'0')*2+(bin[i+1]-'0')*4+(bin[i]-'0')*8);
printf(“n”);
}
return 0;}
//参考代码2:
#include #include #define maxn 10006
int main(){ int i, j, t, tp, p;charstr[maxn], str_rev[maxn];char res[maxn/4], tmp[6], tmp_rev[6];while(scanf(“%d”, &t)!=EOF){ while(t--){ p = 0;scanf(“%s”, &str);intlen = strlen(str);for(i = lenii;strncpy(tmp, str_rev + i, k);for(j = kj-1] = tmp[j];canf(tmp_rev, “%d”, &tp);//printf(“k = %d tp = %d tmp = %s tmp_rev = %sn”, k, tp, tmp, tmp_rev);switch(tp){ case 0: res[p++] = '0';break;case 1: res[p++] = '1';break;case 10: res[p++] = '2';break;case 11: res[p++] = '3';break;case 100: res[p++] = '4';break;case 101: res[p++] = '5';break;case 110: res[p++] = '6';break;case 111: res[p++] = '7';break;case 1000: res[p++] = '8';break;case 1001: res[p++] = '9';break;case 1010: res[p++] = 'A';break;case 1011: res[p++] = 'B';break;case 1100: res[p++] = 'C';break;case 1101: res[p++] = 'D';break;case 1110: res[p++] = 'E';break;case 1111: res[p++] = 'F';break;default: break;} i += 4;
} for(i = p-1;i >= 0;i--)printf(“%c”, res[i]);printf(“n”);} } return 0;}