#include<stdio.h> #include<stdlib.h> #include<string> #define IsNumber(x) x>='0'&&x<='9'//宏定义判断字符是否是数字 usingnamespacestd; intmain(){ char str[10001]; while (scanf("%s",&str)!=EOF) { string temp = str; int sum = 0; int index = 0;//字符串中数字开始的指针 int len = strlen(str); for (int i = 0; i < len; i++) { if (!(IsNumber(temp[i])) && temp[i] != '-')//若该字符不是数字且不是负号 index++;//数字开始指针后移 else { if (temp[i]=='-'&& !(IsNumber(temp[i+1])))//若负号后不是数字 index++;//数字开始指针后移 elseif(!(IsNumber(temp[i + 1])))//若下一个字符不再是数字 { sum += atoi(temp.substr(index, i - index + 1).data());//累加结果 index = i + 1; } } } printf("%d\n", sum); } return0; }
#include<stdio.h> int maze[101][101]; //保存地图信息 bool mark[101][101]; //为图上每一个点设立一个状态 int n, m; //地图大小为n*m int go[][2] = { 1,0,-1,0,0,1,0,-1}; //四个相邻点与当前位置的坐标差 voidDFS(int x, int y)//递归遍历所有与x,y直接或间接相邻的相同的数 { for (int i = 0; i < 4; i++) { int nx = x + go[i][0]; int ny = y + go[i][1]; if (nx<1 || nx>n || ny<1 || ny>m) continue;//若该坐标超出矩阵范围则丢弃 if (maze[nx][ny] != maze[x][y]) continue;//若扩展的字符与当前字符不同则丢弃 if (mark[nx][ny]) continue;//若该块计算过 mark[nx][ny] = true;//标记已计算 DFS(nx, ny);//递归查询与其相邻的点 } } intmain(){ while (scanf("%d%d", &n, &m)) { if (n == 0 && m == 0) break; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) scanf("%d", &maze[i][j]);// 第 i 行地图信息保存在 maze[i][1] 到maze[i][m]中 for (int i = 1; i <= n; i++) //初始化所有位置为未被计算 for (int j = 1; j <= m; j++) mark[i][j] = false; int ans = 0;//计数器 for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (mark[i][j]) continue;//若该块计算过 DFS(i, j); ans++;//答案递增 } printf("%d\n", ans); } return0; }
#include<stdio.h> int maze[101][101]; //保存地图信息 bool mark[101][101]; //为图上每一个点设立一个状态 int n, m; //地图大小为n*m int go[][2] = { 1,0,-1,0,0,1,0,-1}; //四个相邻点与当前位置的坐标差 bool flag = false;//设置一个标志位,记录该点是否扩展到了其他位置 voidDFS(int x, int y)//递归遍历所有与x,y直接或间接相邻的相同的数 { for (int i = 0; i < 4; i++) { int nx = x + go[i][0]; int ny = y + go[i][1]; if (nx<1 || nx>n || ny<1 || ny>m) continue;//若该坐标超出矩阵范围则丢弃 if (maze[nx][ny] != maze[x][y]) continue;//若扩展的字符与当前字符不同则丢弃 if (mark[nx][ny]) continue;//若该块计算过 mark[nx][ny] = true;//标记已计算 flag = true;//已扩展到其他位置 DFS(nx, ny);//递归查询与其相邻的点 } } intmain(){ while (scanf("%d%d", &n, &m)) { if (n == 0 && m == 0) break; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) scanf("%d", &maze[i][j]);// 第 i 行地图信息保存在 maze[i][1] 到maze[i][m]中 for (int i = 1; i <= n; i++) //初始化所有位置为未被计算 for (int j = 1; j <= m; j++) mark[i][j] = false; int ans = 0;//计数器 for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (mark[i][j]) continue;//若该块计算过 DFS(i, j); if (flag)//若不是孤立的块则将其计算在内 { ans++;//答案递增 flag = false; } } printf("%d\n", ans); } return0; }