算法竞赛入门经典第3章总结
2014-07-17 15:51
204 查看
P47: 用getchar 读入int
// P47 use getchar input a int
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a[10];
int bit = 1;
int sum = 0;
int i = 0;
while((a[i] = getchar()) && a[i] != '\n')
{
sum = sum * 10 + (a[i] - '0');
}
printf("%d\n", sum);
return 0;
}
2、用fgets读入int
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char a[10];
int sum = 0;
fgets(a, 10, stdin);
for(int i = 0; a[i] != '\n'; ++i)
{
sum = sum * 10 + a[i] - '0';
}
printf("%d\n", sum);
return 0;
}
3、用getchar实现fgets
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char a[80];
int i = 0;
while((a[i] = getchar() )&& a[i] != '\n')
{
i++;
}
a[i] = '\0';
puts(a);
return 0;
}
4、实现strchr
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100;
int main()
{
char a[maxn];
fgets(a, maxn, stdin);
char c = 'c';
int len = strlen(a);
for(int i = 0; i < len; ++i)
{
if(a[i] == c)
{
printf("%x\n", sizeof(char) * i + a); /// strchr
}
}
return 0;
}
5、实现 ctype.h 中的isalpha 和 isdigit
#include <iostream>
#include <ctype.h>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100;
int main()
{
char a[maxn];
fgets(a, maxn, stdin);
int len = strlen(a);
int c1, c2, c3, c4;
c1 = c2 = c3 = c4 = 0;
for(int i = 0; i< len; ++i)
{
if(isalpha(a[i]))
c1++;
if(isdigit(a[i]))
c2++;
if(a[i] >= '0' && a[i] <= '9')
c3++;
if((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))
c4++;
}
cout << c1 << endl;
cout << c2 << endl;
cout << c3 << endl;
cout << c4 << endl;
return 0;
}
字符串处理的常见问题#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
const int maxn = 1000000;
char s[maxn];
int main()
{
//fgets(s, maxn, stdin);
for(int i = 0; i < 1000000; ++i)
{
s[i] = (rand() % 26) + 'a';
}
int tot = 0;
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
if(s[i] == 'a')
tot++;
}
printf("There are %d character(s) '1' in the string.\n", tot);
printf("Time = %0.2lf\n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}
sscanf()输入
// sscanf http://www.cnblogs.com/kex1n/archive/2011/06/09/2076501.html #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int a, b, c;
char s[20] = "12:34:56";
sscanf(s, "%2d:%2d:%2d", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
P50:上机练习
3、乘积的末3位
#define LOCAL
#include <cstdio>
#include <iostream>
#include <ctype.h>
#include <cstring>
using namespace std;
int main()
{
#ifdef LOCAL
freopen("data11.in", "r", stdin);
freopen("data11.out", "w", stdout);
#endif
char a[10];
int bit[10] = {1};
int sum = 1;
int cnt = 0;
for(int i = 1; i < 10; i++)
{
bit[i] = bit[i-1]*10;
//printf("%d\n", bit[i]);
}
while(scanf("%s", a) != EOF)
{
int tag = 0;
if(isalpha(a[0])) continue;
if(a[0] == '-')
{
tag = 1;
cnt++;
}
int aa = 0;
int len = strlen(a);
if(tag == 1)
{
for(int i = len -1, j = 0; i > 0; --i)
{
aa += (a[i] - '0') * bit[j++];
}
}
else
{
for(int i = len - 1, j = 0; i >=0; --i) /// -_-! (++)!
{
aa += (a[i]-'0') * bit[j++];
}
}
sum = (sum%1000) * (aa % 1000);
}
printf("%d\n", sum%1000);
return 0;
}
4、计算器
#define LOCAL
#include <cstdio>
#include <cstring>
#include <iostream>
#include <ctype.h>
using namespace std;
int main()
{
#ifdef LOCAL
freopen("data12.in", "r", stdin);
freopen("data12.out", "w", stdout);
#endif
char *tmp = NULL;
char a[20];
int b, c;
while(fgets(a, 20, stdin) != NULL)
{
for(tmp = a; *tmp != '\n'; ++tmp)
{
if(*tmp == '+' || *tmp == '-' || *tmp == '*')
break;
}
if(*tmp != '\n')
switch(*tmp){
case '+' :
sscanf(a, "%d + %d", &b, &c);
printf("%d\n", c+b);
break;
case '-':
sscanf(a, "%d - %d", &b, &c);
printf("%d\n", b-c);
break;
case '*':
sscanf(a, "%d * %d", &b, &c);
printf("%d\n", c*b);
break;
}
}
return 0;
}
用sscanf进行了输入问题简化
5、旋转(rotate)
#define LOCA
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
char str[100][100];
char s[100][100];
void revolve(int m, int n)
{
for(int i = m; i <= n; ++i)
{
s
[i] = str[i][m];
}
for(int i = n; i >= m; --i)
{
s[i]
= str
[n+m-i];
}
for(int i = m; i <= n; ++i)
{
s[m][i] = str[i]
;
}
for(int i = n; i >= m; --i)
{
s[i][m] = str[m][n+m-i];
}
return;
}
int main()
{
#ifdef LOCAL
freopen("data13.in", "r", stdin);
freopen("data13.out", "w", stdout);
#endif // LOCAL
FILE *fin, *fout;
fin = fopen("data13.in", "rb");
fout = fopen("data13.out", "wb");
int n;
fscanf(fin, "%d%*c", &n); /// 总是忘记吸收空格,这怎么能行?
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
fscanf(fin, "%c", &str[i][j]);
//printf("%c", str[i][j]);
}
getchar();
}
for(int i = 1, j = n; i <= j; ++i, --j)
{
revolve(i, j);
}
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
fprintf(fout, "%c", s[i][j]);
}
puts("");
}
fclose(fin);
fclose(fout);
return 0;
}
6、进制转化两题
#include <cstdio>
#include <cstring>
using namespace std;
int trans[32];
int bit;
int base;
int handle(int m, int n)
{
int i = 0;
memset(trans, -1, sizeof(trans));
while(m / n != 0)
{
trans[i++] = m % n;
m /= n;
}
trans[i++] = m % n;
trans[i] = '\0';
return i;
}
int main()
{
FILE *fin, *fout;
fin = fopen("data14.in", "rb");
fout = fopen("data14.out", "wb");
while(fscanf(fin, "%d %d", &base, &bit) == 2)
{
int len = handle(base, bit);
for(int i = len - 1; i >= 0; --i)
{
fprintf(fout, "%d", trans[i]);
}
fprintf(fout, " (%d)\n", bit);
}
fclose(fin); //不要忘记关掉!
fclose(fout);
return 0;
}
// P47 use getchar input a int
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a[10];
int bit = 1;
int sum = 0;
int i = 0;
while((a[i] = getchar()) && a[i] != '\n')
{
sum = sum * 10 + (a[i] - '0');
}
printf("%d\n", sum);
return 0;
}
2、用fgets读入int
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char a[10];
int sum = 0;
fgets(a, 10, stdin);
for(int i = 0; a[i] != '\n'; ++i)
{
sum = sum * 10 + a[i] - '0';
}
printf("%d\n", sum);
return 0;
}
3、用getchar实现fgets
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char a[80];
int i = 0;
while((a[i] = getchar() )&& a[i] != '\n')
{
i++;
}
a[i] = '\0';
puts(a);
return 0;
}
4、实现strchr
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100;
int main()
{
char a[maxn];
fgets(a, maxn, stdin);
char c = 'c';
int len = strlen(a);
for(int i = 0; i < len; ++i)
{
if(a[i] == c)
{
printf("%x\n", sizeof(char) * i + a); /// strchr
}
}
return 0;
}
5、实现 ctype.h 中的isalpha 和 isdigit
#include <iostream>
#include <ctype.h>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100;
int main()
{
char a[maxn];
fgets(a, maxn, stdin);
int len = strlen(a);
int c1, c2, c3, c4;
c1 = c2 = c3 = c4 = 0;
for(int i = 0; i< len; ++i)
{
if(isalpha(a[i]))
c1++;
if(isdigit(a[i]))
c2++;
if(a[i] >= '0' && a[i] <= '9')
c3++;
if((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))
c4++;
}
cout << c1 << endl;
cout << c2 << endl;
cout << c3 << endl;
cout << c4 << endl;
return 0;
}
字符串处理的常见问题#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
const int maxn = 1000000;
char s[maxn];
int main()
{
//fgets(s, maxn, stdin);
for(int i = 0; i < 1000000; ++i)
{
s[i] = (rand() % 26) + 'a';
}
int tot = 0;
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
if(s[i] == 'a')
tot++;
}
printf("There are %d character(s) '1' in the string.\n", tot);
printf("Time = %0.2lf\n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}
sscanf()输入
// sscanf http://www.cnblogs.com/kex1n/archive/2011/06/09/2076501.html #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int a, b, c;
char s[20] = "12:34:56";
sscanf(s, "%2d:%2d:%2d", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
P50:上机练习
3、乘积的末3位
#define LOCAL
#include <cstdio>
#include <iostream>
#include <ctype.h>
#include <cstring>
using namespace std;
int main()
{
#ifdef LOCAL
freopen("data11.in", "r", stdin);
freopen("data11.out", "w", stdout);
#endif
char a[10];
int bit[10] = {1};
int sum = 1;
int cnt = 0;
for(int i = 1; i < 10; i++)
{
bit[i] = bit[i-1]*10;
//printf("%d\n", bit[i]);
}
while(scanf("%s", a) != EOF)
{
int tag = 0;
if(isalpha(a[0])) continue;
if(a[0] == '-')
{
tag = 1;
cnt++;
}
int aa = 0;
int len = strlen(a);
if(tag == 1)
{
for(int i = len -1, j = 0; i > 0; --i)
{
aa += (a[i] - '0') * bit[j++];
}
}
else
{
for(int i = len - 1, j = 0; i >=0; --i) /// -_-! (++)!
{
aa += (a[i]-'0') * bit[j++];
}
}
sum = (sum%1000) * (aa % 1000);
}
printf("%d\n", sum%1000);
return 0;
}
4、计算器
#define LOCAL
#include <cstdio>
#include <cstring>
#include <iostream>
#include <ctype.h>
using namespace std;
int main()
{
#ifdef LOCAL
freopen("data12.in", "r", stdin);
freopen("data12.out", "w", stdout);
#endif
char *tmp = NULL;
char a[20];
int b, c;
while(fgets(a, 20, stdin) != NULL)
{
for(tmp = a; *tmp != '\n'; ++tmp)
{
if(*tmp == '+' || *tmp == '-' || *tmp == '*')
break;
}
if(*tmp != '\n')
switch(*tmp){
case '+' :
sscanf(a, "%d + %d", &b, &c);
printf("%d\n", c+b);
break;
case '-':
sscanf(a, "%d - %d", &b, &c);
printf("%d\n", b-c);
break;
case '*':
sscanf(a, "%d * %d", &b, &c);
printf("%d\n", c*b);
break;
}
}
return 0;
}
用sscanf进行了输入问题简化
5、旋转(rotate)
#define LOCA
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
char str[100][100];
char s[100][100];
void revolve(int m, int n)
{
for(int i = m; i <= n; ++i)
{
s
[i] = str[i][m];
}
for(int i = n; i >= m; --i)
{
s[i]
= str
[n+m-i];
}
for(int i = m; i <= n; ++i)
{
s[m][i] = str[i]
;
}
for(int i = n; i >= m; --i)
{
s[i][m] = str[m][n+m-i];
}
return;
}
int main()
{
#ifdef LOCAL
freopen("data13.in", "r", stdin);
freopen("data13.out", "w", stdout);
#endif // LOCAL
FILE *fin, *fout;
fin = fopen("data13.in", "rb");
fout = fopen("data13.out", "wb");
int n;
fscanf(fin, "%d%*c", &n); /// 总是忘记吸收空格,这怎么能行?
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
fscanf(fin, "%c", &str[i][j]);
//printf("%c", str[i][j]);
}
getchar();
}
for(int i = 1, j = n; i <= j; ++i, --j)
{
revolve(i, j);
}
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
fprintf(fout, "%c", s[i][j]);
}
puts("");
}
fclose(fin);
fclose(fout);
return 0;
}
6、进制转化两题
#include <cstdio>
#include <cstring>
using namespace std;
int trans[32];
int bit;
int base;
int handle(int m, int n)
{
int i = 0;
memset(trans, -1, sizeof(trans));
while(m / n != 0)
{
trans[i++] = m % n;
m /= n;
}
trans[i++] = m % n;
trans[i] = '\0';
return i;
}
int main()
{
FILE *fin, *fout;
fin = fopen("data14.in", "rb");
fout = fopen("data14.out", "wb");
while(fscanf(fin, "%d %d", &base, &bit) == 2)
{
int len = handle(base, bit);
for(int i = len - 1; i >= 0; --i)
{
fprintf(fout, "%d", trans[i]);
}
fprintf(fout, " (%d)\n", bit);
}
fclose(fin); //不要忘记关掉!
fclose(fout);
return 0;
}
#include <cstdio> #include <cstring> using namespace std; int bit; char base[32]; int res; int handle(int len, int b) { int result = 0; int bt = b; ///用以保存bit的数值,下边的核心啊! for(int i = len-1; i >= 0; --i) { result += (i == len-1) ? (base[i] - '0') : (base[i] - '0') * (b / bt); b *= bt; ///b *= b 这个不对啊, 增长的也太快了点 } return result; } int main() { FILE *fin, *fout; fin = fopen("data15.in", "rb"); fout = fopen("data15.out", "wb"); //fin = stdin; //fout = stdout; while(fscanf(fin, "%s %d%*c", base, &bit) != EOF) { fputs(base, fout); fprintf(fout ,"\nbit is %d\n", bit); int len = strlen(base); fprintf(fout ,"len is %d\n", len); fprintf(fout, "%d\n", handle(len, bit)); } fclose(fin); fclose(fout); return 0; }
相关文章推荐
- 算法竞赛入门经典第3章【小结与习题】
- 算法竞赛入门经典第二章上机以总结
- 算法竞赛入门经典第3章【读书笔记】
- 算法竞赛入门经典题目总结
- 算法竞赛入门经典 5.1 字符串总结
- 算法竞赛入门经典第3章【小结与习题】
- 算法竞赛入门经典第3章
- 初学网页Javascript经典小教程总结[转载+慢慢补充]
- 总结:WHUACM 2007暑假招新笔试(附原题,有许多经典的面试题目)
- 正则表达式经典学习总结
- 经典总结:PERL中用DBD:ORACLE模块的权限问题
- 经典代码总结(译)
- 总结2006年最经典爆笑、低调变态的精品语录100条
- 转载:经典的人生总结!
- Java的中文问题解决经典总结
- [转]Java堆和栈的区别 经典总结
- 网页制作Javascript经典小技巧总结
- 把java程序作成windows EXE程序或windows服务---经典总结
- SQL Server SA权限总结经典技术
- 2006经典总结之“十大消失事件”